diff --git a/.eslintrc.json b/.eslintrc.json index 70a34c24b..0cec7246b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,10 +24,7 @@ { "allowWholeFile": true } ], "eslint-comments/no-unused-disable": "error", - "import/order": [ - "error", - { "alphabetize": { "order": "asc" } } - ], + "import/order": ["error", { "alphabetize": { "order": "asc" } }], "sort-imports": [ "error", { "ignoreDeclarationSort": true, "ignoreCase": true } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..1bec86e53 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,45 @@ +# .github/workflows/publish.yml +name: Generate a build and push to another branch + +on: + push: + branches: + - "*" + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + name: Build and Push + steps: + - name: git-checkout + uses: actions/checkout@v2 + + - name: setup node.js + uses: actions/setup-node@v2.4.0 + with: + node-version: 16.x + # cache: yarn + # cache-dependency-path: yarn.lock + + - name: dep + run: yarn + + - name: build + run: yarn build + + - name: Generate Docs + run: npx typedoc --out docs src/index.ts + + - name: prepare package + run: mkdir out && mv package.json out && mv dist out && mv README.md out && mv LICENSE out && mv docs out + + - name: Prepare Production Release + uses: s0/git-publish-subdir-action@develop + if: ${{ github.ref == 'refs/heads/production' }} + env: + REPO: self + BRANCH: bleeding-edge + FOLDER: out + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MESSAGE: "Build: ({sha}) {msg}" diff --git a/.gitignore b/.gitignore index 6d104f94e..ad6445214 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,12 @@ build node_modules test +dist src/**.js coverage *.log tsconfig.tsbuildinfo -dist/docs +src/test.ts +.env* +test* +*.DS_Store diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000..0da96d6ba --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx pretty-quick --staged diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..25fa6215f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..7abdc74c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2021 XP.network + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index e69de29bb..a6468b367 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,667 @@ +
+ +# XP Network JS API + +
+ +### Work In Progress / Alpha Stage Library + +
+Bridging steps: +
+ +- [x] [1. Installing the library](#1-install-the-libraries-required-for-the-project) +- [x] [2. Importing the dependencies](#2-import-the-dependencies) +- [x] [3. Getting the signer objects](#3-get-the-signer-objects) + - [x] [3.1 Backend unsafe signer](#31-example-of-getting-the-signer-object-for-manual-testing-in-the-be) + - [x] [3.2 EVM compatible browser extension signer](#32-example-of-getting-the-signer-object-in-the-fe-for-web3) + - [x] [3.3 Elrond signer](#33-example-of-getting-the-signer-object-in-the-fe-for-metaversx) + - [x] [3.4 Tron signer](#34-example-of-getting-the-signer-object-in-the-fe-for-tron) + - [x] [3.5 Algorand signer](#35-example-of-getting-the-signer-object-in-the-fe-for-algorand) + - [x] [3.6 Tezos signer](#36-example-of-getting-the-signer-object-in-the-fe-for-tezos) + - [x] [3.7 Secret signer](#37-example-of-secret-network) + - [x] [3.8 TON signer](#38-example-signer-object-for-ton) +- [x] [4. Getting the Chain's inner objects](#4-getting-the-inner-objects-from-this-factory-to-be-used-for-transferring-minting-estimation-of-gas-fees) +- [x] [5. Listing NFTs](#51-listing-nfts-owned-by-the-sender) + - [x] [Example of a native NFT object](#52-example-of-console-logged-native-bsc-nft-object) + - [x] [Example of a wrapped NFT object](#53-example-of-the-console-logged-wrapped-nft-from-bsc-on-velas) +- [x] [6. Approving](#6-approve-accessing-your-nft-by-the-bridge-smart-contract) +- [x] [7. Transferring NFTs between chains](#7-transferring-an-nft) +- [x] [Minting NFTs](#minting-nfts-on-evm-chains-metaversx--tron)(optional) +- [x] [Estimating the TX fee on the target chain](#estimating-the-transaction-fee-on-the-target-chain) (optional) +- [ ] ... and much more to come + +

+ +## To list and transfer NFTs, follow the steps below: + +
+
+ +Make sure [nodejs](https://nodejs.org/en/download/) is installed on your machine.
+
+ +### 1. Install the libraries required for the project: + +
+ +```bash +yarn add xp.network +``` + +OR + +```bash +npm i --save xp.network +``` + +To import the latest version of `xp.network` library: + +```bash +yarn add "git+https://github.com/xp-network/xpjs#bleeding-edge" +``` + +
+ +### 2. Import the dependencies

+ +```javascript +import { + ChainFactoryConfigs, + ChainFactory, + Chain, + AppConfigs, + ChainParams, +} from "xp.network"; +import { config } from 'dotenv'; +config(); + +(async () => { + // Instantiate the chain factory for the + // Connecting to the mainnnets of all the blockchains: + const mainnetConfig = await ChainFactoryConfigs.MainNet(); + const mainnetFactory: ChainFactory = ChainFactory( + AppConfigs.MainNet(), + mainnetConfig + ); + + // Connecting to the testnets of all the blockchains: + const testnetConfig = await ChainFactoryConfigs.TestNet(); + const testnetFactory: ChainFactory = ChainFactory( + AppConfigs.TestNet(), + testnetConfig + ); + + // Switching between the mainnets & the testnets: + const factory: ChainFactory = mainnetFactory; // or = testnetConfig; + const CONFIG: Partial = mainnetConfig; // or = testnetConfig; +})(); +``` + +

+ +## 3. Get the signer objects + +### 3.1 Example of getting the signer object (for manual EVM testing in the BE) + +Avoid using 3.1 setup in production. Use it for initial or backend testing only. +
+ +Add your private key to the environment: + +```bash +touch .env +echo "SK=" >> .env +``` + +```javascript +// EVM chains compatible wallet: +import { Wallet } from "ethers"; +import { config } from 'dotenv'; +config(); +// EVM signer for testing in the BE +const signer = new Wallet( + process.env.SK!, + // Replace 'polygonParams' + // with the relevant parameter + // from the table below + CONFIG.polygonParams?.provider + ); +``` + +
+ +| Chain | Parameters | Chain Nonce | +| :-----------: | :-------------: | :---------: | +| Elrond | metaversxParams | 2 | +| BSC | bscParams | 4 | +| Ethereum | ropstenParams | 5 | +| Avalanche | avalancheParams | 6 | +| Polygon | polygonParams | 7 | +| Fantom | fantomParams | 8 | +| Tron | tronParams | 9 | +| Harmony | harmonyParams | 12 | +| xDai | xDaiParams | 14 | +| Algorand | algorandParams | 15 | +| Fuse | fuseParams | 16 | +| Tezos | tezosParams | 18 | +| Velas | velasParams | 19 | +| Aurora | auroraParams | 21 | +| Godwoken | godwokenParams | 22 | +| Gatechain | gatechainParams | 23 | +| VeChain | vechainParams | 25 | +| Solana | solanaParams | 26 | +| TON | tonParams | 27 | +| DFinity | dfinityParams | 28 | +| Hedera | hederaParams | 29 | +| Skale | skaleParams | 30 | +| NEAR | nearParams | 31 | +| Moonbeam | moonbeamParams | 32 | +| Abeychain | abeychainParams | 33 | +| Aptos | aptosParams | 34 | +| Caduceus | caduceusParams | 35 | +| OKC | okcParams | 36 | +| Arbitrum Nova | arbitrumParams | 37 | +| Bitgert | bitgertParams | 38 | + +

+ +### 3.2 Example of getting the signer object (in the FE for web3):

+ +```typescript +// EVM chains compatible signer: +import ethers from "ethers"; +const signer = new ethers.providers.Web3Provider(window.ethereum).getSigner(); +``` + +
+ +### 3.3 Example of getting the signer object (in the FE for Elrond):

+ +```typescript +// ELROND provider (injected from the browser extension): +import { ExtensionProvider } from "@metaversxnetwork/erdjs/out"; +const metaversxSigner = ExtensionProvider.getInstance(); + +// Elrond signer from a PEM key stored in the .env file +import { UserSigner } from "@metaversxnetwork/erdjs/out"; +const metaversxSigner = UserSigner.fromPem(process.env.ELROND_PEM!); +``` + +
+ +### 3.4 Example of getting the signer object (in the FE for Tron):

+ +```typescript +// Address is fetched from tronweb +(async () => { + const addresses = await window.tronLink.tronWeb.request({ + method: "tron_requestAccounts", + }); + const tronSigner = addresses[0]; +})(); +``` + +### 3.5 Example of getting the signer object (in the FE for Algorand):

+ +```typescript +import { typedAlgoSigner } from "xp.network/dist/helpers/algorand"; +// Use the typedAlgoSigner function to get access to the Algorand signer +const algorandSigner = typedAlgoSigner(); +``` + +### 3.6 Example of getting the signer object (in the FE for Tezos):

+ +```typescript +import { TempleWallet } from "@temple-wallet/dapp"; +(async () => { + try { + const available = await TempleWallet.isAvailable(); + if (!available) { + throw new Error("Temple Wallet is not installed"); + } + const tezosSigner = new TempleWallet("bridge.xp.network"); + } catch (error) { + console.error("Error:", error); + } +})(); +``` + +### 3.7 Example of Secret Network + +```typescript +import { SecretNetworkClient, Wallet } from "secretjs"; +import { SecretNftInfo } from "xp.network/dist/helpers/secret"; + +const wallet = new Wallet(process.env.mnemonic!); + +// Testnet example +const client = await SecretNetworkClient.create({ + chainId: "pulsar-2", + grpcWebUrl: TestNetRpcUri.SECRET, + wallet: wallet, + walletAddress: wallet.address, +}); +``` + +### 3.8 Example signer object for TON + +```ts +import { config } from "dotenv"; +config(); +import { + AppConfigs, + Chain, + ChainFactory, + ChainFactoryConfigs, +} from "xp.network"; + +import { mnemonicToKeyPair } from "tonweb-mnemonic"; + +(async () => { + const factory = ChainFactory( + AppConfigs.TestNet(), + await ChainFactoryConfigs.TestNet() + ); + + const ton = await factory.inner(Chain.TON); + + const tonSigner = ton.tonKpWrapper( + // where TON_MNEMONIC="space separated mnemonic phrase ..." + await mnemonicToKeyPair(process.env.TON_MNEMONIC!.split()) + ); +})(); +``` + +
+ +For the ways of connecting the wallets in the FE check-out our [bridge repository](https://github.com/xp-network/bridge-interface/blob/components-reorder/src/components/ConnectWallet.jsx) + +
+ +### 4. Getting the inner objects from this factory to be used for transferring, minting, and estimation of gas fees.

+ +```javascript +(async () => { + // EVM compatible chains: + // Inner Object ====================================== Chain Nonce + const bsc = await factory.inner(Chain.BSC); // 4 + const ethereum = await factory.inner(Chain.ETHEREUM); // 5 + const avax = await factory.inner(Chain.AVALANCHE); // 6 + const polygon = await factory.inner(Chain.POLYGON); // 7 + const fantom = await factory.inner(Chain.FANTOM); // 8 + const harmony = await factory.inner(Chain.HARMONY); // 12 + const gnosis = await factory.inner(Chain.XDAI); // 14 + const fuse = await factory.inner(Chain.FUSE); // 16 + const velas = await factory.inner(Chain.VELAS); // 19 + const aurora = await factory.inner(Chain.AURORA); // 21 + const godwoken = await factory.inner(Chain.GODWOKEN); // 22 + const gatechain = await factory.inner(Chain.GATECHAIN); // 23 + const vechain = await factory.inner(Chain.VECHAIN); // 25 + const hedera = await factory.inner(Chain.HEDERA); // 29 + const skale = await factory.inner(Chain.SKALE); // 30 + const moonbeam = await factory.inner(Chain.MOONBEAM); // 32 + const abeychain = await factory.inner(Chain.ABEYCHAIN); // 33 + const causeus = await factory.inner(Chain.CADUCEUS); //35 + const okc = await factory.inner(Chain.OKC); //36 + const arbitrum = await factory.inner(Chain.ARBITRUM); //37 + const bitgert = await factory.inner(Chain.BITGERT); //38 + + // Non-EVM chains: + // Inner Object ====================================== Chain Nonce + const metaversx = await factory.inner(Chain.ELROND); // 2 + const tron = await factory.inner(Chain.TRON); // 9 + const algorand = await factory.inner(Chain.ALGORAND); // 15 + const tezos = await factory.inner(Chain.TEZOS); // 18 + const secret = await factory.inner(Chain.SECRET); // 24 + const solana = await factory.inner(Chain.SOLANA); // 26 + const ton = await factory.inner(Chain.TON); // 27 + const dfinity = await factory.inner(Chain.DFINITY); // 28 + const near = await factory.inner(Chain.NEAR); // 31 + const aptos = await factory.inner(Chain.APTOS); //34 +})(); +``` + +

+ +### 5.1 Listing NFTs Owned by the sender.

+ +This operation does not depend on a wallet since reading operations are free and, therefore, do not require signing. +
+ +```javascript +(async () => { + // EVM: + const web3Nfts = await factory.nftList( + harmony, // The chain of interest + "0x...." // The public key of the NFT owner in a web3 chain + ); + + // Elrond: + const metaversxNfts = await factory.nftList( + metaversx, // The chain of interest + "erd1...." // The public key of the NFT owner in Elrond + ); + + // Tron: + const tronNfts = await factory.nftList( + tron, // The chain of interest + "TJuG..." // The public key of the NFT owner in Tron + ); + + // Algorand: + const algoNfts = factory.nftList( + algorand, // Algorand chain internal object + "PUPTH..." // The public key of the NFT owner in Algorand + ); + + // Tezos: + const tezosNfts = await factory.nftList( + tezos, // Tezos chain internal object + "EQB..." // The public key of the NFT owner in Tezos + ); + + // Secret: + const secretNfts = await factory.nftList( + secret, // Secret chain internal object + "secret1..." // The public key of the NFT owner in Secret + ); + + // TON: + const tonNfts = await factory.nftList( + ton, // TON chain internal object + "tz1..." // The public key of the NFT owner in TON + ); +})(); +``` + +```javascript +// Choosing an NFT to transfer: +const web3ChosenOne = web3Nfts[0]; +const metaversxChosenOne = metaversxNfts[0]; +const tronChosenOne = tronNfts[0]; +const algoChosenOne = algoNfts[0]; +const tezosChosenOne = tezosNfts[0]; +const secretChosenOne = secretNfts[0]; +const tonChosenOne = tonNfts[0]; + +// Checking the selected NFT object +console.log("EVM Selected NFT: ", web3ChosenOne); +console.log("Elrond Selected NFT: ", metaversxChosenOne); +console.log("Tron Selected NFT: ", tronChosenOne); +console.log("Algorand Selected NFT: ", algoChosenOne); +console.log("Tezos Selected NFT: ", tezosChosenOne); +console.log("Secret Selected NFT: ", secretChosenOne); +console.log("Ton Selected NFT: ", tonChosenOne); +``` + +### 5.2 Example of console logged native BSC NFT object: + +```json +{ + "uri": "https://api.alturanft.com/meta/chain-caders/", + "native": { + "chainId": "4", // ChainId (4 = BSC) + "tokenId": "2639", // ID in the NFT smart contract + "contract": "0x387d38eEaaa7F1235c00aE6ee9b1462c026007f4", + "owner": "0x6449b68cc5675f6011e8DB681B142773A3157cb9", + "uri": "https://api.alturanft.com/meta/chain-caders/", + "symbol": null, + "name": "ChainCaders", // Collection Name + "contractType": "ERC1155" + }, + "collectionIdent": "0x387d38eeaaa7f1235c00ae6ee9b1462c026007f4" +} +``` + +### 5.3 Example of the console logged wrapped NFT + +```json +{ + "uri": "https://nft.xp.network/w/30576349324667796398547334318", + "native": { + "chainId": "4", // Original chainId + "tokenId": "30576349324667796398547334318", // Wrapped ID + "contract": "0x8Ae5Fa4DDb131695CDe906BE03b33ebb277DF9A4", // Original Owner + "owner": "0x6449b68cc5675f6011e8DB681B142773A3157cb9", + "uri": "https://nft.xp.network/w/30576349324667796398547334318", // Original URI + "symbol": "vr3DNFTs", // Custom collection name + "name": "Virtual Reality 3D NFTs", // Custom collection name + "contractType": "ERC721" + }, + "collectionIdent": "0x8ae5fa4ddb131695cde906be03b33ebb277df9a4" +} +``` + +

+ +### 6. Approve accessing your NFT by the bridge smart contract

+ +```javascript +(async () => { + // EVM example + const isApprovedEVM = await harmony.approveForMinter(web3ChosenOne, signer); + console.log("Is Approved in an EVM:", isApprovedEVM); + + // Elrond example + const isApprovedElrond = await metaversx.approveForMinter( + metaversxChosenOne, + metaversxSigner + ); + console.log("Is Approved in Elrond:", isApprovedElrond); + + // Tron example + const isApprovedTron = await metaversx.approveForMinter( + tronChosenOne, + tronSigner + ); + console.log("Is Approved in Tron:", isApprovedTron); + + // Algorand example + const isApprovedAlgorand = await algorand.approveForMinter( + algoChosenOne, + algorandSigner + ); + console.log("Is Approved in Algorand:", isApprovedAlgorand); + + // Tezos example + const isApprovedTezos = await algorand.approveForMinter( + tezosChosenOne, + tezosSigner + ); + console.log("Is Approved in Tezos:", isApprovedTezos); + + // Secret example + const secretApprove = await scrt.preTransfer( + client, + chosenOne, + new BigNumber(0) + ); + console.log("Approved for Secret:", secretApprove); + + // TON + // Approval is not required in TON... +})(); +``` + +

+ +### 7. Transferring an NFT

+ +```javascript +(async () => { + // EVM compatible chains example: + const web3Result = await factory.transferNft( + harmony, // The Source Chain. + bsc, // The Destination Chain. + theChosenOne, // The NFT object you have chosen from the list. + signer, // The web3 signer object (see p. 3.2 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(web3Result); + + // Elrond example: + const metaversxResult = await factory.transferNft( + metaversx, // The Source Chain. + tron, // The Destination Chain. + metaversxChosenOne, // The NFT object you have chosen from the list. + metaversxSigner, // The Elrond signer object (see p. 3.3 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(metaversxResult); + + // Tron example: + const tronResult = await factory.transferNft( + tron, // The Source Chain. + metaversx, // The Destination Chain. + tronChosenOne, // The NFT object you have chosen from the list. + tronSigner, // The Tron signer object (see p. 3.4 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(tronResult); + + // Algorand example: + const algorandResult = await factory.transferNft( + algorand, // The Source Chain. + metaversx, // The Destination Chain. + algoChosenOne, // The NFT object you have chosen from the list. + algorandSigner, // The Tron signer object (see p. 3.5 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(algorandResult); + + // Tezos example: + const tezosResult = await factory.transferNft( + tezos, // The Source Chain. + velas, // The Destination Chain. + tezosChosenOne, // Or the NFT object you have chosen from the list. + tezosrandSigner, // The Tron signer object (see p. 3.5 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(tezosResult); + + // TON example: + const tonResult = await factory.transferNft( + ton, // The Source Chain. + abeychain, // The Destination Chain. + tonChosenOne, // Or the NFT object you have chosen from the list. + tonSigner, // The Tron signer object (see p. 3.5 above). + "ADDRESS OF THE RECEIVER" // The address whom you are transferring the NFT to. + ); + console.log(tonResult); +})(); +``` + +


+ +## Minting NFTs on EVM chains, Elrond & Tron + +
+
+ +- Just call the mint function on the factory with suitable arguments. + +
+ +1. For Web3 Chains: + +```javascript +(async () => { + // Web3Provider generally refers to a walletProvider like Metamask. + const receipt = await factory.mint( + avax, // The chain where to mint + signer, // The browser injected signer + { + // Could be an IPFS URL or Any URL that points to a Metadata + uris: [metadata.url], + // Description of your NFT. Can be an object. + attrs: description, + // A name that defines your NFT. + name: name, + // The contract with which you want to mint the NFT. + contract: "Can be fetched from the mainnetConfig or testnetConfig", + } + ); +})(); +``` + +
+ +2. For Elrond:
+ +```javascript +(async () => { + // Deploying ESDTs: + const response = await metaversx.issueESDTNft( + metaversxSigner, + "Target", + "TGT", + true, // canFreeze + true, // canWipe + true // canTransferNftCreateRole + ); + + // Checking whether ESDTs exist for this account + const esdts = await metaversx.mintableEsdts( + metaversxSigner.getAddress()) + .catch((e) => { + console.log("Failed to get Mintable ESDTs", e) + return undefined + }) + + const identifier = esdts ? esdts[0]: undefined; + + if (!identifier) { + throw new Error("No ESDT found for this address"); + } + + // Minting an NFT to an ESDT + const response = await metaversx.mintNft( + metaversxSigner, + { + identifier, // Your ESDT token + quantity: 1, // How many tokens you want to mint > 0 + name: "Your token name goes here", + uris: ["replace with your link(s)"], + } as any); + + console.log(response) +})(); +``` + +
+ +3. For Tron: + +```javascript +const receipt = await factory.mint(avax, tronSigner, { + // Could be an IPFS URL or Any URL that points to a Metadata + uris: [metadata.url], + // Description of your NFT. Can be an object. + attrs: description, + // A name that defines your NFT. + name: name, + // The contract with which you want to mint the NFT. + contract: "Can be fetched from the mainnetConfig or testnetConfig", +}); +``` + +
+ +P.S. The library is a work in progress. More features will be added soon. + +

+ +## Estimating the transaction fee on the target chain + +```typescript +(async () => { + const feeEstimation = await factory.estimateFees( + algorand, // The Source Chain. + tezos, // The Destination Chain. + algoChosenOne, // The NFT object you have chosen from the list. + "tz1..." // The public key of the NFT owner in Tezos + ); + console.log(`The estimated fee on Tezos is: ${feeEstimation} Algos`); +})(); +``` diff --git a/dist/XPNet.json b/dist/XPNet.json deleted file mode 100644 index b6648ba2d..000000000 --- a/dist/XPNet.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "XPNet", - "sourceName": "contracts/XPNet.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "uri_", - "type": "string" - } - ], - "name": "setURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000259565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015290620001f4565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b600060028204905060018216806200020d57607f821691505b602082108114156200022457620002236200022a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6133c680620002696000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c8063862440e21161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b8063862440e2146101f05780638da5cb5b1461020c578063a22cb4651461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632eb2c2d61461019a5780634e1273f4146101b6578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b610108600480360381019061010391906121ed565b6102ca565b6040516101159190612a3b565b60405180910390f35b610138600480360381019061013391906122e4565b610393565b604051610145919061281e565b60405180910390f35b61016860048036038101906101639190612336565b610475565b6040516101759190612839565b60405180910390f35b61019860048036038101906101939190612229565b61051a565b005b6101b460048036038101906101af9190612063565b6105b6565b005b6101d060048036038101906101cb9190612278565b610657565b6040516101dd91906127c5565b60405180910390f35b6101ee610808565b005b61020a6004803603810190610205919061235f565b610890565b005b610214610934565b60405161022191906126e8565b60405180910390f35b610244600480360381019061023f91906121b1565b61095e565b005b610260600480360381019061025b9190612027565b610adf565b60405161026d919061281e565b60405180910390f35b610290600480360381019061028b9190612122565b610b73565b005b6102ac60048036038101906102a79190611ffe565b610c14565b005b6102c860048036038101906102c39190612229565b610d0c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061289b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610d98565b5b9050919050565b606060046000838152602001908152602001600020805461049590612caa565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190612caa565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b50505050509050919050565b610522610e02565b73ffffffffffffffffffffffffffffffffffffffff16610540610934565b73ffffffffffffffffffffffffffffffffffffffff1614610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d9061299b565b60405180910390fd5b6105b183838360405180602001604052806000815250610e0a565b505050565b6105be610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106045750610603856105fe610e02565b610adf565b5b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061293b565b60405180910390fd5b6106508585858585610fa0565b5050505050565b6060815183511461069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610694906129db565b60405180910390fd5b6000835167ffffffffffffffff8111156106e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561070e5781602001602082028036833780820191505090505b50905060005b84518110156107fd576107a7858281518110610759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061079a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516102ca565b8282815181106107e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806107f690612d0d565b9050610714565b508091505092915050565b610810610e02565b73ffffffffffffffffffffffffffffffffffffffff1661082e610934565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b9061299b565b60405180910390fd5b61088e6000611300565b565b610898610e02565b73ffffffffffffffffffffffffffffffffffffffff166108b6610934565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109039061299b565b60405180910390fd5b818160046000868152602001908152602001600020919061092e929190611d14565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661097d610e02565b73ffffffffffffffffffffffffffffffffffffffff1614156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129bb565b60405180910390fd5b80600160006109e1610e02565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a8e610e02565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ad3919061281e565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b7b610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc085610bbb610e02565b610adf565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906128fb565b60405180910390fd5b610c0d85858585856113c6565b5050505050565b610c1c610e02565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610934565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061299b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906128bb565b60405180910390fd5b610d0981611300565b50565b610d14610e02565b73ffffffffffffffffffffffffffffffffffffffff16610d32610934565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061299b565b60405180910390fd5b610d93838383611648565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190612a1b565b60405180910390fd5b6000610e84610e02565b9050610ea581600087610e9688611865565b610e9f88611865565b8761192b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f049190612b9e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051610f82929190612a56565b60405180910390a4610f9981600087878787611933565b5050505050565b8151835114610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb906129fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061291b565b60405180910390fd5b600061105e610e02565b905061106e81878787878761192b565b60005b845181101561126b5760008582815181106110b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061297b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112509190612b9e565b925050819055505050508061126490612d0d565b9050611071565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112e29291906127e7565b60405180910390a46112f8818787878787611b1a565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061291b565b60405180910390fd5b6000611440610e02565b905061146081878761145188611865565b61145a88611865565b8761192b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061297b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ac9190612b9e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611629929190612a56565b60405180910390a461163f828888888888611933565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af9061295b565b60405180910390fd5b60006116c2610e02565b90506116f2818560006116d487611865565b6116dd87611865565b6040518060200160405280600081525061192b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906128db565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611856929190612a56565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d85781602001602082028036833780820191505090505b5090508281600081518110611916577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6119528473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611b12578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199895949392919061276b565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e357506040513d601f19601f820116820180604052508101906119e0919061230d565b60015b611a89576119ef612de3565b806308c379a01415611a4c5750611a0461329e565b80611a0f5750611a4e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061285b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061287b565b60405180910390fd5b505b505050505050565b611b398473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611cf9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7f959493929190612703565b602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bca57506040513d601f19601f82011682018060405250810190611bc7919061230d565b60015b611c7057611bd6612de3565b806308c379a01415611c335750611beb61329e565b80611bf65750611c35565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061285b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061287b565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611d2090612caa565b90600052602060002090601f016020900481019282611d425760008555611d89565b82601f10611d5b57803560ff1916838001178555611d89565b82800160010185558215611d89579182015b82811115611d88578235825591602001919060010190611d6d565b5b509050611d969190611d9a565b5090565b5b80821115611db3576000816000905550600101611d9b565b5090565b6000611dca611dc584612aa4565b612a7f565b90508083825260208201905082856020860282011115611de957600080fd5b60005b85811015611e195781611dff8882611ecd565b845260208401935060208301925050600181019050611dec565b5050509392505050565b6000611e36611e3184612ad0565b612a7f565b90508083825260208201905082856020860282011115611e5557600080fd5b60005b85811015611e855781611e6b8882611fe9565b845260208401935060208301925050600181019050611e58565b5050509392505050565b6000611ea2611e9d84612afc565b612a7f565b905082815260208101848484011115611eba57600080fd5b611ec5848285612c68565b509392505050565b600081359050611edc81613334565b92915050565b600082601f830112611ef357600080fd5b8135611f03848260208601611db7565b91505092915050565b600082601f830112611f1d57600080fd5b8135611f2d848260208601611e23565b91505092915050565b600081359050611f458161334b565b92915050565b600081359050611f5a81613362565b92915050565b600081519050611f6f81613362565b92915050565b600082601f830112611f8657600080fd5b8135611f96848260208601611e8f565b91505092915050565b60008083601f840112611fb157600080fd5b8235905067ffffffffffffffff811115611fca57600080fd5b602083019150836001820283011115611fe257600080fd5b9250929050565b600081359050611ff881613379565b92915050565b60006020828403121561201057600080fd5b600061201e84828501611ecd565b91505092915050565b6000806040838503121561203a57600080fd5b600061204885828601611ecd565b925050602061205985828601611ecd565b9150509250929050565b600080600080600060a0868803121561207b57600080fd5b600061208988828901611ecd565b955050602061209a88828901611ecd565b945050604086013567ffffffffffffffff8111156120b757600080fd5b6120c388828901611f0c565b935050606086013567ffffffffffffffff8111156120e057600080fd5b6120ec88828901611f0c565b925050608086013567ffffffffffffffff81111561210957600080fd5b61211588828901611f75565b9150509295509295909350565b600080600080600060a0868803121561213a57600080fd5b600061214888828901611ecd565b955050602061215988828901611ecd565b945050604061216a88828901611fe9565b935050606061217b88828901611fe9565b925050608086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611f75565b9150509295509295909350565b600080604083850312156121c457600080fd5b60006121d285828601611ecd565b92505060206121e385828601611f36565b9150509250929050565b6000806040838503121561220057600080fd5b600061220e85828601611ecd565b925050602061221f85828601611fe9565b9150509250929050565b60008060006060848603121561223e57600080fd5b600061224c86828701611ecd565b935050602061225d86828701611fe9565b925050604061226e86828701611fe9565b9150509250925092565b6000806040838503121561228b57600080fd5b600083013567ffffffffffffffff8111156122a557600080fd5b6122b185828601611ee2565b925050602083013567ffffffffffffffff8111156122ce57600080fd5b6122da85828601611f0c565b9150509250929050565b6000602082840312156122f657600080fd5b600061230484828501611f4b565b91505092915050565b60006020828403121561231f57600080fd5b600061232d84828501611f60565b91505092915050565b60006020828403121561234857600080fd5b600061235684828501611fe9565b91505092915050565b60008060006040848603121561237457600080fd5b600061238286828701611fe9565b935050602084013567ffffffffffffffff81111561239f57600080fd5b6123ab86828701611f9f565b92509250509250925092565b60006123c383836126ca565b60208301905092915050565b6123d881612bf4565b82525050565b60006123e982612b3d565b6123f38185612b6b565b93506123fe83612b2d565b8060005b8381101561242f57815161241688826123b7565b975061242183612b5e565b925050600181019050612402565b5085935050505092915050565b61244581612c06565b82525050565b600061245682612b48565b6124608185612b7c565b9350612470818560208601612c77565b61247981612e05565b840191505092915050565b600061248f82612b53565b6124998185612b8d565b93506124a9818560208601612c77565b6124b281612e05565b840191505092915050565b60006124ca603483612b8d565b91506124d582612e23565b604082019050919050565b60006124ed602883612b8d565b91506124f882612e72565b604082019050919050565b6000612510602b83612b8d565b915061251b82612ec1565b604082019050919050565b6000612533602683612b8d565b915061253e82612f10565b604082019050919050565b6000612556602483612b8d565b915061256182612f5f565b604082019050919050565b6000612579602983612b8d565b915061258482612fae565b604082019050919050565b600061259c602583612b8d565b91506125a782612ffd565b604082019050919050565b60006125bf603283612b8d565b91506125ca8261304c565b604082019050919050565b60006125e2602383612b8d565b91506125ed8261309b565b604082019050919050565b6000612605602a83612b8d565b9150612610826130ea565b604082019050919050565b6000612628602083612b8d565b915061263382613139565b602082019050919050565b600061264b602983612b8d565b915061265682613162565b604082019050919050565b600061266e602983612b8d565b9150612679826131b1565b604082019050919050565b6000612691602883612b8d565b915061269c82613200565b604082019050919050565b60006126b4602183612b8d565b91506126bf8261324f565b604082019050919050565b6126d381612c5e565b82525050565b6126e281612c5e565b82525050565b60006020820190506126fd60008301846123cf565b92915050565b600060a08201905061271860008301886123cf565b61272560208301876123cf565b818103604083015261273781866123de565b9050818103606083015261274b81856123de565b9050818103608083015261275f818461244b565b90509695505050505050565b600060a08201905061278060008301886123cf565b61278d60208301876123cf565b61279a60408301866126d9565b6127a760608301856126d9565b81810360808301526127b9818461244b565b90509695505050505050565b600060208201905081810360008301526127df81846123de565b905092915050565b6000604082019050818103600083015261280181856123de565b9050818103602083015261281581846123de565b90509392505050565b6000602082019050612833600083018461243c565b92915050565b600060208201905081810360008301526128538184612484565b905092915050565b60006020820190508181036000830152612874816124bd565b9050919050565b60006020820190508181036000830152612894816124e0565b9050919050565b600060208201905081810360008301526128b481612503565b9050919050565b600060208201905081810360008301526128d481612526565b9050919050565b600060208201905081810360008301526128f481612549565b9050919050565b600060208201905081810360008301526129148161256c565b9050919050565b600060208201905081810360008301526129348161258f565b9050919050565b60006020820190508181036000830152612954816125b2565b9050919050565b60006020820190508181036000830152612974816125d5565b9050919050565b60006020820190508181036000830152612994816125f8565b9050919050565b600060208201905081810360008301526129b48161261b565b9050919050565b600060208201905081810360008301526129d48161263e565b9050919050565b600060208201905081810360008301526129f481612661565b9050919050565b60006020820190508181036000830152612a1481612684565b9050919050565b60006020820190508181036000830152612a34816126a7565b9050919050565b6000602082019050612a5060008301846126d9565b92915050565b6000604082019050612a6b60008301856126d9565b612a7860208301846126d9565b9392505050565b6000612a89612a9a565b9050612a958282612cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115612abf57612abe612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aeb57612aea612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b1757612b16612db4565b5b612b2082612e05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ba982612c5e565b9150612bb483612c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612be957612be8612d56565b5b828201905092915050565b6000612bff82612c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c95578082015181840152602081019050612c7a565b83811115612ca4576000848401525b50505050565b60006002820490506001821680612cc257607f821691505b60208210811415612cd657612cd5612d85565b5b50919050565b612ce582612e05565b810181811067ffffffffffffffff82111715612d0457612d03612db4565b5b80604052505050565b6000612d1882612c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4b57612d4a612d56565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e025760046000803e612dff600051612e16565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156132ae57613331565b6132b6612a9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156132de575050613331565b808201805167ffffffffffffffff8111156132fc5750505050613331565b80602083010160043d038501811115613319575050505050613331565b61332882602001850186612cdc565b82955050505050505b90565b61333d81612bf4565b811461334857600080fd5b50565b61335481612c06565b811461335f57600080fd5b50565b61336b81612c12565b811461337657600080fd5b50565b61338281612c5e565b811461338d57600080fd5b5056fea26469706673582212207c954b474ba2938a61031705a0987bcb898a0dffe9cb3f5a8744e3e16585386e64736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100e95760003560e01c8063862440e21161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b8063862440e2146101f05780638da5cb5b1461020c578063a22cb4651461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632eb2c2d61461019a5780634e1273f4146101b6578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b610108600480360381019061010391906121ed565b6102ca565b6040516101159190612a3b565b60405180910390f35b610138600480360381019061013391906122e4565b610393565b604051610145919061281e565b60405180910390f35b61016860048036038101906101639190612336565b610475565b6040516101759190612839565b60405180910390f35b61019860048036038101906101939190612229565b61051a565b005b6101b460048036038101906101af9190612063565b6105b6565b005b6101d060048036038101906101cb9190612278565b610657565b6040516101dd91906127c5565b60405180910390f35b6101ee610808565b005b61020a6004803603810190610205919061235f565b610890565b005b610214610934565b60405161022191906126e8565b60405180910390f35b610244600480360381019061023f91906121b1565b61095e565b005b610260600480360381019061025b9190612027565b610adf565b60405161026d919061281e565b60405180910390f35b610290600480360381019061028b9190612122565b610b73565b005b6102ac60048036038101906102a79190611ffe565b610c14565b005b6102c860048036038101906102c39190612229565b610d0c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061289b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610d98565b5b9050919050565b606060046000838152602001908152602001600020805461049590612caa565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190612caa565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b50505050509050919050565b610522610e02565b73ffffffffffffffffffffffffffffffffffffffff16610540610934565b73ffffffffffffffffffffffffffffffffffffffff1614610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d9061299b565b60405180910390fd5b6105b183838360405180602001604052806000815250610e0a565b505050565b6105be610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106045750610603856105fe610e02565b610adf565b5b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061293b565b60405180910390fd5b6106508585858585610fa0565b5050505050565b6060815183511461069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610694906129db565b60405180910390fd5b6000835167ffffffffffffffff8111156106e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561070e5781602001602082028036833780820191505090505b50905060005b84518110156107fd576107a7858281518110610759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061079a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516102ca565b8282815181106107e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806107f690612d0d565b9050610714565b508091505092915050565b610810610e02565b73ffffffffffffffffffffffffffffffffffffffff1661082e610934565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b9061299b565b60405180910390fd5b61088e6000611300565b565b610898610e02565b73ffffffffffffffffffffffffffffffffffffffff166108b6610934565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109039061299b565b60405180910390fd5b818160046000868152602001908152602001600020919061092e929190611d14565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661097d610e02565b73ffffffffffffffffffffffffffffffffffffffff1614156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129bb565b60405180910390fd5b80600160006109e1610e02565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a8e610e02565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ad3919061281e565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b7b610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc085610bbb610e02565b610adf565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906128fb565b60405180910390fd5b610c0d85858585856113c6565b5050505050565b610c1c610e02565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610934565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061299b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906128bb565b60405180910390fd5b610d0981611300565b50565b610d14610e02565b73ffffffffffffffffffffffffffffffffffffffff16610d32610934565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061299b565b60405180910390fd5b610d93838383611648565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190612a1b565b60405180910390fd5b6000610e84610e02565b9050610ea581600087610e9688611865565b610e9f88611865565b8761192b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f049190612b9e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051610f82929190612a56565b60405180910390a4610f9981600087878787611933565b5050505050565b8151835114610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb906129fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061291b565b60405180910390fd5b600061105e610e02565b905061106e81878787878761192b565b60005b845181101561126b5760008582815181106110b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061297b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112509190612b9e565b925050819055505050508061126490612d0d565b9050611071565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112e29291906127e7565b60405180910390a46112f8818787878787611b1a565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061291b565b60405180910390fd5b6000611440610e02565b905061146081878761145188611865565b61145a88611865565b8761192b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061297b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ac9190612b9e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611629929190612a56565b60405180910390a461163f828888888888611933565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af9061295b565b60405180910390fd5b60006116c2610e02565b90506116f2818560006116d487611865565b6116dd87611865565b6040518060200160405280600081525061192b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906128db565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611856929190612a56565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d85781602001602082028036833780820191505090505b5090508281600081518110611916577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6119528473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611b12578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199895949392919061276b565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e357506040513d601f19601f820116820180604052508101906119e0919061230d565b60015b611a89576119ef612de3565b806308c379a01415611a4c5750611a0461329e565b80611a0f5750611a4e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061285b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061287b565b60405180910390fd5b505b505050505050565b611b398473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611cf9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7f959493929190612703565b602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bca57506040513d601f19601f82011682018060405250810190611bc7919061230d565b60015b611c7057611bd6612de3565b806308c379a01415611c335750611beb61329e565b80611bf65750611c35565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061285b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061287b565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611d2090612caa565b90600052602060002090601f016020900481019282611d425760008555611d89565b82601f10611d5b57803560ff1916838001178555611d89565b82800160010185558215611d89579182015b82811115611d88578235825591602001919060010190611d6d565b5b509050611d969190611d9a565b5090565b5b80821115611db3576000816000905550600101611d9b565b5090565b6000611dca611dc584612aa4565b612a7f565b90508083825260208201905082856020860282011115611de957600080fd5b60005b85811015611e195781611dff8882611ecd565b845260208401935060208301925050600181019050611dec565b5050509392505050565b6000611e36611e3184612ad0565b612a7f565b90508083825260208201905082856020860282011115611e5557600080fd5b60005b85811015611e855781611e6b8882611fe9565b845260208401935060208301925050600181019050611e58565b5050509392505050565b6000611ea2611e9d84612afc565b612a7f565b905082815260208101848484011115611eba57600080fd5b611ec5848285612c68565b509392505050565b600081359050611edc81613334565b92915050565b600082601f830112611ef357600080fd5b8135611f03848260208601611db7565b91505092915050565b600082601f830112611f1d57600080fd5b8135611f2d848260208601611e23565b91505092915050565b600081359050611f458161334b565b92915050565b600081359050611f5a81613362565b92915050565b600081519050611f6f81613362565b92915050565b600082601f830112611f8657600080fd5b8135611f96848260208601611e8f565b91505092915050565b60008083601f840112611fb157600080fd5b8235905067ffffffffffffffff811115611fca57600080fd5b602083019150836001820283011115611fe257600080fd5b9250929050565b600081359050611ff881613379565b92915050565b60006020828403121561201057600080fd5b600061201e84828501611ecd565b91505092915050565b6000806040838503121561203a57600080fd5b600061204885828601611ecd565b925050602061205985828601611ecd565b9150509250929050565b600080600080600060a0868803121561207b57600080fd5b600061208988828901611ecd565b955050602061209a88828901611ecd565b945050604086013567ffffffffffffffff8111156120b757600080fd5b6120c388828901611f0c565b935050606086013567ffffffffffffffff8111156120e057600080fd5b6120ec88828901611f0c565b925050608086013567ffffffffffffffff81111561210957600080fd5b61211588828901611f75565b9150509295509295909350565b600080600080600060a0868803121561213a57600080fd5b600061214888828901611ecd565b955050602061215988828901611ecd565b945050604061216a88828901611fe9565b935050606061217b88828901611fe9565b925050608086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611f75565b9150509295509295909350565b600080604083850312156121c457600080fd5b60006121d285828601611ecd565b92505060206121e385828601611f36565b9150509250929050565b6000806040838503121561220057600080fd5b600061220e85828601611ecd565b925050602061221f85828601611fe9565b9150509250929050565b60008060006060848603121561223e57600080fd5b600061224c86828701611ecd565b935050602061225d86828701611fe9565b925050604061226e86828701611fe9565b9150509250925092565b6000806040838503121561228b57600080fd5b600083013567ffffffffffffffff8111156122a557600080fd5b6122b185828601611ee2565b925050602083013567ffffffffffffffff8111156122ce57600080fd5b6122da85828601611f0c565b9150509250929050565b6000602082840312156122f657600080fd5b600061230484828501611f4b565b91505092915050565b60006020828403121561231f57600080fd5b600061232d84828501611f60565b91505092915050565b60006020828403121561234857600080fd5b600061235684828501611fe9565b91505092915050565b60008060006040848603121561237457600080fd5b600061238286828701611fe9565b935050602084013567ffffffffffffffff81111561239f57600080fd5b6123ab86828701611f9f565b92509250509250925092565b60006123c383836126ca565b60208301905092915050565b6123d881612bf4565b82525050565b60006123e982612b3d565b6123f38185612b6b565b93506123fe83612b2d565b8060005b8381101561242f57815161241688826123b7565b975061242183612b5e565b925050600181019050612402565b5085935050505092915050565b61244581612c06565b82525050565b600061245682612b48565b6124608185612b7c565b9350612470818560208601612c77565b61247981612e05565b840191505092915050565b600061248f82612b53565b6124998185612b8d565b93506124a9818560208601612c77565b6124b281612e05565b840191505092915050565b60006124ca603483612b8d565b91506124d582612e23565b604082019050919050565b60006124ed602883612b8d565b91506124f882612e72565b604082019050919050565b6000612510602b83612b8d565b915061251b82612ec1565b604082019050919050565b6000612533602683612b8d565b915061253e82612f10565b604082019050919050565b6000612556602483612b8d565b915061256182612f5f565b604082019050919050565b6000612579602983612b8d565b915061258482612fae565b604082019050919050565b600061259c602583612b8d565b91506125a782612ffd565b604082019050919050565b60006125bf603283612b8d565b91506125ca8261304c565b604082019050919050565b60006125e2602383612b8d565b91506125ed8261309b565b604082019050919050565b6000612605602a83612b8d565b9150612610826130ea565b604082019050919050565b6000612628602083612b8d565b915061263382613139565b602082019050919050565b600061264b602983612b8d565b915061265682613162565b604082019050919050565b600061266e602983612b8d565b9150612679826131b1565b604082019050919050565b6000612691602883612b8d565b915061269c82613200565b604082019050919050565b60006126b4602183612b8d565b91506126bf8261324f565b604082019050919050565b6126d381612c5e565b82525050565b6126e281612c5e565b82525050565b60006020820190506126fd60008301846123cf565b92915050565b600060a08201905061271860008301886123cf565b61272560208301876123cf565b818103604083015261273781866123de565b9050818103606083015261274b81856123de565b9050818103608083015261275f818461244b565b90509695505050505050565b600060a08201905061278060008301886123cf565b61278d60208301876123cf565b61279a60408301866126d9565b6127a760608301856126d9565b81810360808301526127b9818461244b565b90509695505050505050565b600060208201905081810360008301526127df81846123de565b905092915050565b6000604082019050818103600083015261280181856123de565b9050818103602083015261281581846123de565b90509392505050565b6000602082019050612833600083018461243c565b92915050565b600060208201905081810360008301526128538184612484565b905092915050565b60006020820190508181036000830152612874816124bd565b9050919050565b60006020820190508181036000830152612894816124e0565b9050919050565b600060208201905081810360008301526128b481612503565b9050919050565b600060208201905081810360008301526128d481612526565b9050919050565b600060208201905081810360008301526128f481612549565b9050919050565b600060208201905081810360008301526129148161256c565b9050919050565b600060208201905081810360008301526129348161258f565b9050919050565b60006020820190508181036000830152612954816125b2565b9050919050565b60006020820190508181036000830152612974816125d5565b9050919050565b60006020820190508181036000830152612994816125f8565b9050919050565b600060208201905081810360008301526129b48161261b565b9050919050565b600060208201905081810360008301526129d48161263e565b9050919050565b600060208201905081810360008301526129f481612661565b9050919050565b60006020820190508181036000830152612a1481612684565b9050919050565b60006020820190508181036000830152612a34816126a7565b9050919050565b6000602082019050612a5060008301846126d9565b92915050565b6000604082019050612a6b60008301856126d9565b612a7860208301846126d9565b9392505050565b6000612a89612a9a565b9050612a958282612cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115612abf57612abe612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aeb57612aea612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b1757612b16612db4565b5b612b2082612e05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ba982612c5e565b9150612bb483612c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612be957612be8612d56565b5b828201905092915050565b6000612bff82612c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c95578082015181840152602081019050612c7a565b83811115612ca4576000848401525b50505050565b60006002820490506001821680612cc257607f821691505b60208210811415612cd657612cd5612d85565b5b50919050565b612ce582612e05565b810181811067ffffffffffffffff82111715612d0457612d03612db4565b5b80604052505050565b6000612d1882612c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4b57612d4a612d56565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e025760046000803e612dff600051612e16565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156132ae57613331565b6132b6612a9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156132de575050613331565b808201805167ffffffffffffffff8111156132fc5750505050613331565b80602083010160043d038501811115613319575050505050613331565b61332882602001850186612cdc565b82955050505050505b90565b61333d81612bf4565b811461334857600080fd5b50565b61335481612c06565b811461335f57600080fd5b50565b61336b81612c12565b811461337657600080fd5b50565b61338281612c5e565b811461338d57600080fd5b5056fea26469706673582212207c954b474ba2938a61031705a0987bcb898a0dffe9cb3f5a8744e3e16585386e64736f6c63430008040033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/dist/fakeERC1155.json b/dist/fakeERC1155.json deleted file mode 100644 index c0f474782..000000000 --- a/dist/fakeERC1155.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "uri_", - "type": "string" - } - ], - "name": "setURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/dist/fakeERC721.json b/dist/fakeERC721.json deleted file mode 100644 index ed5bec8d5..000000000 --- a/dist/fakeERC721.json +++ /dev/null @@ -1,365 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "CANNOT_TRANSFER_TO_ZERO_ADDRESS", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NOT_CURRENT_OWNER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_approved", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceID", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/dist/helpers/chain.d.ts b/dist/helpers/chain.d.ts deleted file mode 100644 index cd5c88d9f..000000000 --- a/dist/helpers/chain.d.ts +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Transfer Liquidity to a foregin chain, freezing the original liquidity - * - * @param sender Account which owns the liquidity on the native chain, able to sign transactions - * @param chain_nonce Nonce of the target chain - * @param to Address of the receiver on the foreign chain - * @param value Amount of liquidity to send - * - * @returns Transaction and the Identifier of this action to track the status - */ -export interface TransferForeign { - transferNativeToForeign(sender: Signer, chain_nonce: number, to: ForeignAddr, value: Balance): Promise<[Tx, EventIdent]>; -} -/** - * Unfreeze native liquidity existing on a foreign chain(Send back Liquidity) - * - * @param sender Account which owns the wrapped liquidity on this chain, able to sign transactions - * @param chain_nonce Nonce of the original chain - * @param to Address of the receiver on the original chain - * @param value Amount of liquidity to unfreeze - * - * @returns Transaction and the Identifier of this action to track the status - */ -export interface UnfreezeForeign { - unfreezeWrapped(sender: Signer, chain_nonce: number, to: ForeignAddr, value: Balance): Promise<[Tx, EventIdent]>; -} -/** - * Transfer NFT to a foreign chain, freezing the original one - * - * @param sender Account which owns the NFT on the native chain, able to sign transactions - * @param chain_nonce Nonce of the target chain - * @param to Address of the receiver on the foreign chain - * @param id Information required to freeze this nft - * - * @returns Transaction and the Identifier of this action to track the status - */ -export interface TransferNftForeign { - transferNftToForeign(sender: Signer, chain_nonce: number, to: ForeignAddr, id: NftIdent): Promise<[Tx, EventIdent]>; -} -/** - * Unfreeze native NFT existing on a foreign chain(Send back NFT) - * chain_nonce is automatically derived - * - * @param sender Account which owns the wrapped NFT on this chain, able to sign transactions - * @param to Address of the receiver on the original chain - * @param id Information required to unfreeze this nft - * - * @returns Transaction and the Identifier of this action to track the status - */ -export interface UnfreezeForeignNft { - unfreezeWrappedNft(sender: Signer, to: ForeignAddr, id: NftIdent): Promise<[Tx, EventIdent]>; -} -/** - * Get the balance of an address on the chain - */ -export interface BalanceCheck { - balance(address: Addr): Promise; -} -/** - * Get the balance of a foreign token for an account in this chain - * - * @param address Address of the user - * @param chain_nonce nonce of the foreign chain - */ -export interface WrappedBalanceCheck { - balanceWrapped(address: Addr, chain_nonce: number): Promise; -} -/** - * Get the balance of multiple foreign tokens for an account in this chain - * - * @param chain_nonces list of foreign tokens to fetch - * @returns Mapping of chain_nonce to balance - */ -export interface BatchWrappedBalanceCheck { - balanceWrappedBatch(address: Addr, chain_nonces: number[]): Promise>; -} -/** - * Create a new NFT on this chain - * - * @param options Arguments required to mint the nft - */ -export interface MintNft { - mintNft(owner: Signer, options: Args): Promise; -} -/** - * Get the list of NFTs for a given account - */ -export interface ListNft { - listNft(owner: Addr): Promise>; -} -/** - * Get the original data of a locked NFT (uri, name, etc) - */ -export interface GetLockedNft { - getLockedNft(ident: Ident): Promise; -} -export declare type WrappedNft = { - chain_nonce: number; - data: Uint8Array; -}; -export interface DecodeWrappedNft { - decodeWrappedNft(raw_data: Data): WrappedNft; -} -export interface DecodeRawNft { - decodeUrlFromRaw(data: Uint8Array): Promise; -} -export declare function ConcurrentSendError(): Error; diff --git a/dist/helpers/chain.js b/dist/helpers/chain.js deleted file mode 100644 index 9dbe66eed..000000000 --- a/dist/helpers/chain.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConcurrentSendError = void 0; -function ConcurrentSendError() { - return new Error("concurrent_send"); -} -exports.ConcurrentSendError = ConcurrentSendError; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9jaGFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtSkEsU0FBZ0IsbUJBQW1CO0lBQ2xDLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtBQUNwQyxDQUFDO0FBRkQsa0RBRUMifQ== \ No newline at end of file diff --git a/dist/helpers/elrond.d.ts b/dist/helpers/elrond.d.ts deleted file mode 100644 index a6e394b7e..000000000 --- a/dist/helpers/elrond.d.ts +++ /dev/null @@ -1,140 +0,0 @@ -/** - * Elrond Implementation for cross chain traits - * Unsigned Transaction methods should be used for usage with @elrondnetwork/dapp - * Note that Unsigned Transactions need to be manually handled after they have been added to the block - * @module - */ -import { Address, ISigner, Transaction, TransactionHash } from "@elrondnetwork/erdjs"; -import BigNumber from "bignumber.js"; -import { BalanceCheck, BatchWrappedBalanceCheck, DecodeRawNft, DecodeWrappedNft, GetLockedNft, ListNft, MintNft, TransferForeign, TransferNftForeign, UnfreezeForeign, UnfreezeForeignNft } from "./chain"; -declare type EasyBalance = string | number | BigNumber; -/** - * Information required to perform NFT transfers in this chain - */ -export declare type NftInfo = { - token: string; - nonce: EasyBalance; -}; -/** - * Information associated with an ESDT Token - */ -export declare type EsdtTokenInfo = { - readonly balance: string; - readonly tokenIdentifier: string; -}; -declare type BEsdtNftInfo = { - readonly attributes?: string; - readonly creator: string; - readonly name: string; - readonly nonce: number; - readonly royalties: string; - readonly uris: string[]; -}; -/** - * Information associated with an ESDT NFT - */ -export declare type EsdtNftInfo = EsdtTokenInfo & BEsdtNftInfo; -/** - * arguments required to issue an NFT - */ -export declare type NftIssueArgs = { - readonly identifier: string; - readonly quantity: number | undefined; - readonly name: string; - readonly royalties: number | undefined; - readonly hash: string | undefined; - readonly attrs: string | undefined; - readonly uris: Array; -}; -/** - * Utility for issuing ESDT which supports NFT minting - */ -export interface IssueESDTNFT { - /** - * Unsigned Transaction for [[issueESDTNft]] - */ - unsignedIssueESDTNft(name: string, ticker: string, canFreeze: boolean | undefined, canWipe: boolean | undefined, canTransferNFTCreateRole: boolean | undefined): Transaction; - /** - * Issue a new ESDT supporting NFTs - * - * @param sender Owner of this ESDT - * @param name Name of the ESDT - * @param ticker Ticker of the ESDT - * @param canFreeze Wheteher this ESDT can be frozen - * @param canWipe Whether this ESDT can be wiped - * @param canTransferNFTCreateRole Whether the NFT Creation role can be transferred - */ - issueESDTNft(sender: ISigner, name: string, ticker: string, canFreeze: boolean | undefined, canWipe: boolean | undefined, canTransferNFTCreateRole: boolean | undefined): Promise; -} -/** - * Possible roles for an ESDT - * - * ESDTRoleNFTCreate: Allow creating NFTs - * ESDTRoleNFTBurn: Allow burning NFTs - * ESDTRoleNFTAddQuanitity: Allowing minting >1 NFTs (SFT) - */ -export declare type ESDTRole = "ESDTRoleNFTCreate" | "ESDTRoleNFTBurn" | "ESDTRoleNFTAddQuantity"; -/** - * Utility for setting ESDT roles - */ -export interface SetESDTRoles { - /** - * Unsigned Transaction for [[setESDTRole]] - */ - unsignedSetESDTRoles(token: string, target: Address, roles: [ESDTRole]): Transaction; - /** - * - * Set the roles for a given account for an esdt - * - * @param sender Target account - * @param token ESDT Identifier - * @param roles Roles to set - */ - setESDTRole(sender: ISigner, token: string, roles: [ESDTRole]): Promise; -} -/** - * Identifier for tracking a given action - */ -declare type EventIdent = number; -/** - * Traits implemented by this module - */ -export declare type ElrondHelper = BalanceCheck & BatchWrappedBalanceCheck & TransferForeign & UnfreezeForeign & TransferNftForeign & UnfreezeForeignNft & IssueESDTNFT & MintNft & ListNft & GetLockedNft & DecodeWrappedNft & DecodeRawNft & { - /** - * Unsigned Transaction for [[TransferForeign]] - */ - unsignedTransferTxn(chain_nonce: number, to: string, value: EasyBalance): Transaction; - /** - * Unsigned Transaction for [[UnfreezeForeign]] - */ - unsignedUnfreezeTxn(chain_nonce: number, address: Address, to: string, value: EasyBalance): Transaction; - /** - * Unsigned Transaction for [[TransferNftForeign]] - */ - unsignedTransferNftTxn(chain_nonce: number, address: Address, to: string, info: NftInfo): Transaction; - /** - * Unsigned Transaction for [[UnfreezeForeignNft]] - */ - unsignedUnfreezeNftTxn(address: Address, to: string, id: number): Transaction; - /** - * Unsigned transaction for Minting an NFT - */ - unsignedMintNftTxn(owner: Address, args: NftIssueArgs): Transaction; - /** - * Raw result of a transaction - * - * @param tx_hash Hash of the transaction - */ - rawTxnResult(tx_hash: TransactionHash): Promise; -}; -/** - * Create an object implementing cross chain utilities for elrond - * - * @param node_uri URI of the elrond node - * @param minter_address Address of the minter smart contract - * @param middleware_uri REST API of elrond-event-middleware - * @param esdt Identifier of the ESDT Wrapper - * @param esdt_nft Identifier of the ESDT NFT Wrapper - */ -export declare const elrondHelperFactory: (node_uri: string, minter_address: string, esdt: string, esdt_nft: string) => Promise; -export {}; diff --git a/dist/helpers/elrond.js b/dist/helpers/elrond.js deleted file mode 100644 index 6df45defa..000000000 --- a/dist/helpers/elrond.js +++ /dev/null @@ -1,351 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.elrondHelperFactory = void 0; -/** - * Elrond Implementation for cross chain traits - * Unsigned Transaction methods should be used for usage with @elrondnetwork/dapp - * Note that Unsigned Transactions need to be manually handled after they have been added to the block - * @module - */ -const erdjs_1 = require("@elrondnetwork/erdjs"); -const axios_1 = __importDefault(require("axios")); -const bignumber_js_1 = __importDefault(require("bignumber.js")); -const chain_1 = require("./chain"); -const js_base64_1 = require("js-base64"); -const ESDT_ISSUE_ADDR = new erdjs_1.Address("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"); -const ESDT_ISSUE_COST = "50000000000000000"; -function isEsdtNftInfo(maybe) { - return maybe.creator != undefined && maybe.balance == "1"; -} -; -/** - * Create an object implementing cross chain utilities for elrond - * - * @param node_uri URI of the elrond node - * @param minter_address Address of the minter smart contract - * @param middleware_uri REST API of elrond-event-middleware - * @param esdt Identifier of the ESDT Wrapper - * @param esdt_nft Identifier of the ESDT NFT Wrapper - */ -const elrondHelperFactory = async (node_uri, minter_address, esdt, esdt_nft) => { - const provider = new erdjs_1.ProxyProvider(node_uri); - await erdjs_1.NetworkConfig.getDefault().sync(provider); - const mintContract = new erdjs_1.Address(minter_address); - const providerRest = axios_1.default.create({ - baseURL: node_uri - }); - const esdtHex = Buffer.from(esdt, "utf-8"); - const esdtNftHex = Buffer.from(esdt_nft, "utf-8"); - const decoder = new TextDecoder(); - const syncAccount = async (signer) => { - const account = new erdjs_1.Account(signer.getAddress()); - await account.sync(provider); - return account; - }; - const signAndSend = async (signer, tx) => { - const acc = await syncAccount(signer); - tx.setNonce(acc.nonce); - await signer.sign(tx); - try { - await tx.send(provider); - } - catch (e) { - if (e.message.includes("lowerNonceInTx")) { - throw chain_1.ConcurrentSendError(); - } - else { - throw e; - } - } - return tx; - }; - const transactionResult = async (tx_hash) => { - const uri = `/transaction/${tx_hash.toString()}?withResults=true`; - let tries = 0; - while (tries < 10) { - tries += 1; - let err; - // TODO: type safety - const res = await providerRest.get(uri).catch(e => err = e); - if (err) { - await new Promise(r => setTimeout(r, 3000)); - continue; - } - const data = res.data; - if (data["code"] != "successful") { - throw Error("failed to execute txn"); - } - const tx_info = data["data"]["transaction"]; - if (tx_info["status"] == "pending") { - await new Promise(r => setTimeout(r, 5000)); - continue; - } - if (tx_info["status"] != "success") { - throw Error("failed to execute txn"); - } - return tx_info; - } - throw Error(`failed to query transaction exceeded 10 retries ${tx_hash}`); - }; - const unsignedTransferTxn = (chain_nonce, to, value) => { - return new erdjs_1.Transaction({ - receiver: mintContract, - gasLimit: new erdjs_1.GasLimit(50000000), - value: new erdjs_1.Balance(value.toString()), - data: erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("freezeSend")) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(chain_nonce))) - .addArg(new erdjs_1.BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); - }; - const unsignedMintNftTxn = (owner, { identifier, quantity, name, royalties, hash, attrs, uris }) => { - let baseArgs = erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("ESDTNFTCreate")) - .addArg(new erdjs_1.TokenIdentifierValue(Buffer.from(identifier, 'utf-8'))) - .addArg(new erdjs_1.BigUIntValue(new bignumber_js_1.default(quantity !== null && quantity !== void 0 ? quantity : 1))) - .addArg(new erdjs_1.BytesValue(Buffer.from(name, 'utf-8'))) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(royalties !== null && royalties !== void 0 ? royalties : 0))) - .addArg(new erdjs_1.BytesValue(hash ? Buffer.from(hash, 'utf-8') : Buffer.alloc(0))) - .addArg(new erdjs_1.BytesValue(attrs ? Buffer.from(attrs, 'utf-8') : Buffer.alloc(0))); - for (const uri of uris) { - baseArgs = baseArgs.addArg(new erdjs_1.BytesValue(Buffer.from(uri, 'utf-8'))); - } - return new erdjs_1.Transaction({ - receiver: owner, - gasLimit: new erdjs_1.GasLimit(70000000), - data: baseArgs.build() - }); - }; - const unsignedTransferNftTxn = (chain_nonce, address, to, { token, nonce }) => { - return new erdjs_1.Transaction({ - receiver: address, - gasLimit: new erdjs_1.GasLimit(70000000), - data: erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("ESDTNFTTransfer")) - .addArg(new erdjs_1.TokenIdentifierValue(Buffer.from(token, "utf-8"))) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(nonce))) - .addArg(new erdjs_1.BigUIntValue(new bignumber_js_1.default(1))) - .addArg(new erdjs_1.AddressValue(mintContract)) - .addArg(new erdjs_1.BytesValue(Buffer.from("freezeSendNft", "ascii"))) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(chain_nonce))) - .addArg(new erdjs_1.BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); - }; - const unsignedUnfreezeNftTxn = (address, to, id) => { - return new erdjs_1.Transaction({ - receiver: address, - gasLimit: new erdjs_1.GasLimit(70000000), - data: erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("ESDTNFTTransfer")) - .addArg(new erdjs_1.TokenIdentifierValue(esdtNftHex)) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(id))) - .addArg(new erdjs_1.BigUIntValue(new bignumber_js_1.default(1))) - .addArg(new erdjs_1.AddressValue(mintContract)) - .addArg(new erdjs_1.BytesValue(Buffer.from("withdrawNft", "ascii"))) - .addArg(new erdjs_1.BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); - }; - const unsignedUnfreezeTxn = (chain_nonce, address, to, value) => { - return new erdjs_1.Transaction({ - receiver: address, - gasLimit: new erdjs_1.GasLimit(50000000), - data: erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("ESDTNFTTransfer")) - .addArg(new erdjs_1.TokenIdentifierValue(esdtHex)) - .addArg(new erdjs_1.U64Value(new bignumber_js_1.default(chain_nonce))) - .addArg(new erdjs_1.BigUIntValue(new bignumber_js_1.default(value))) - .addArg(new erdjs_1.AddressValue(mintContract)) - .addArg(new erdjs_1.BytesValue(Buffer.from("withdraw", "ascii"))) - .addArg(new erdjs_1.BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); - }; - const listEsdt = async (owner) => { - const raw = await providerRest(`/address/${owner}/esdt`); - const dat = raw.data.data.esdts; - return dat; - }; - async function listNft(owner) { - const ents = Object.entries(await listEsdt(owner)); - const fmapCb = ([tok, info]) => { - var _a; - if (!isEsdtNftInfo(info)) { - return []; - } - let sp = tok.split("-"); - let nonce = (_a = sp.pop()) !== null && _a !== void 0 ? _a : ""; - return [[`${sp.join("-")}-${parseInt(nonce, 16).toString()}`, info]]; - }; - return new Map(ents.flatMap(fmapCb)); - } - const unsignedIssueESDTNft = (name, ticker, canFreeze, canWipe, canTransferNFTCreateRole) => { - let baseArgs = erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("issueNonFungible")) - .addArg(new erdjs_1.TokenIdentifierValue(Buffer.from(name, 'utf-8'))) - .addArg(new erdjs_1.TokenIdentifierValue(Buffer.from(ticker, 'utf-8'))); - if (canFreeze !== undefined) { - baseArgs = baseArgs.addArg(new erdjs_1.BytesValue(Buffer.from("canFreeze", 'ascii'))) - .addArg(new erdjs_1.BytesValue(Buffer.from(canFreeze ? "true" : "false", 'ascii'))); - } - if (canWipe !== undefined) { - baseArgs = baseArgs.addArg(new erdjs_1.BytesValue(Buffer.from("canWipe", 'ascii'))) - .addArg(new erdjs_1.BytesValue(Buffer.from(canWipe ? "true" : "false", "ascii"))); - } - if (canTransferNFTCreateRole !== undefined) { - baseArgs = baseArgs.addArg(new erdjs_1.BytesValue(Buffer.from('canTransferNFTCreateRole', 'ascii'))) - .addArg(new erdjs_1.BytesValue(Buffer.from(canTransferNFTCreateRole ? "true" : "false", "ascii"))); - } - return new erdjs_1.Transaction({ - receiver: ESDT_ISSUE_ADDR, - value: new erdjs_1.Balance(ESDT_ISSUE_COST), - gasLimit: new erdjs_1.GasLimit(60000000), - data: baseArgs.build() - }); - }; - const unsignedSetESDTRoles = (token, target, roles) => { - let baseArgs = erdjs_1.TransactionPayload.contractCall() - .setFunction(new erdjs_1.ContractFunction("setSpecialRole")) - .addArg(new erdjs_1.TokenIdentifierValue(Buffer.from(token))) - .addArg(new erdjs_1.AddressValue(target)); - for (const role of roles) { - baseArgs = baseArgs.addArg(new erdjs_1.BytesValue(Buffer.from(role, 'utf-8'))); - } - return new erdjs_1.Transaction({ - receiver: ESDT_ISSUE_ADDR, - gasLimit: new erdjs_1.GasLimit(70000000), - data: baseArgs.build() - }); - }; - async function getLockedNft({ token, nonce }) { - const nfts = await listNft(minter_address); - return nfts.get(`${token}-${nonce.toString()}`); - } - const rawNftDecoder = (nftDat) => { - /// TokenLen(4 by), TokenIdent(TokenLen by), Nonce(8 by) - /// BinaryCodec is broken for browsers. Decode manually :| - if (nftDat.length < 12) { - throw Error("not a wrapped nft"); - } - const tokenLen = (new Uint32Array(nftDat.slice(0, 4).reverse()))[0]; - if (nftDat.length !== 12 + tokenLen) { - throw Error("not a wrapped nft"); - } - const token = decoder.decode(nftDat.slice(4, 4 + tokenLen)); - // TODO: Consider LO - // tfw js can't convert be bytes to u64 - const nonce = (new Uint32Array(nftDat.slice(4 + tokenLen, 12 + tokenLen).reverse()))[0]; - return { token, nonce }; - }; - async function extractId(tx) { - let err; - await tx.awaitExecuted(provider).catch(e => err = e); - if (err) { - await new Promise(r => setTimeout(r, 3000)); - return extractId(tx); - } - const txr = await transactionResult(tx.getHash()); - const id = filterEventId(txr["smartContractResults"]); - return [tx, id]; - } - return { - rawTxnResult: transactionResult, - unsignedTransferTxn, - unsignedUnfreezeTxn, - unsignedTransferNftTxn, - unsignedUnfreezeNftTxn, - unsignedMintNftTxn, - unsignedSetESDTRoles, - async balance(address) { - const wallet = new erdjs_1.Account(new erdjs_1.Address(address)); - await wallet.sync(provider); - return wallet.balance.valueOf(); - }, - async balanceWrappedBatch(address, chain_nonces) { - const esdts = Object.values(await listEsdt(address.toString())); - const res = new Map(chain_nonces.map(v => [v, new bignumber_js_1.default(0)])); - for (const esdt of esdts) { - esdt.nonce && esdt.tokenIdentifier.startsWith(esdt.tokenIdentifier) && res.set(esdt.nonce, new bignumber_js_1.default(esdt.balance)); - } - return res; - }, - async transferNativeToForeign(sender, chain_nonce, to, value) { - const txu = unsignedTransferTxn(chain_nonce, to, value); - const tx = await signAndSend(sender, txu); - return await extractId(tx); - }, - async unfreezeWrapped(sender, chain_nonce, to, value) { - const txu = unsignedUnfreezeTxn(chain_nonce, sender.getAddress(), to, value); - const tx = await signAndSend(sender, txu); - return await extractId(tx); - }, - async transferNftToForeign(sender, chain_nonce, to, info) { - const txu = unsignedTransferNftTxn(chain_nonce, sender.getAddress(), to, info); - const tx = await signAndSend(sender, txu); - return await extractId(tx); - }, - async unfreezeWrappedNft(sender, to, nonce) { - const txu = unsignedUnfreezeNftTxn(sender.getAddress(), to, nonce); - const tx = await signAndSend(sender, txu); - return await extractId(tx); - }, - unsignedIssueESDTNft, - async issueESDTNft(sender, name, ticker, canFreeze = false, canWipe = false, canTransferNFTCreateRole = false) { - const txu = unsignedIssueESDTNft(name, ticker, canFreeze, canWipe, canTransferNFTCreateRole); - await signAndSend(sender, txu); - }, - async mintNft(owner, args) { - const txu = unsignedMintNftTxn(owner.getAddress(), args); - await signAndSend(owner, txu); - }, - listNft, - getLockedNft, - async setESDTRole(manager, token, target, roles) { - const txu = unsignedSetESDTRoles(token, target, roles); - await signAndSend(manager, txu); - }, - decodeWrappedNft(raw_data) { - if (!raw_data.attributes) { - throw Error("can't decode chain nonce"); - } - return { - // TODO: CONSIDER ALL BE BYTES - chain_nonce: js_base64_1.Base64.toUint8Array(raw_data.attributes)[0], - data: js_base64_1.Base64.toUint8Array(raw_data.uris[0]) - }; - }, - async decodeUrlFromRaw(data) { - const nft_info = rawNftDecoder(data); - const locked = await getLockedNft(nft_info); - if (locked === undefined) { - throw Error("Not a wrapped nft"); - } - return js_base64_1.Base64.atob(locked.uris[0]); - } - }; -}; -exports.elrondHelperFactory = elrondHelperFactory; -function filterEventId(results) { - for (const res of results) { - if (res["nonce"] === 0) { - continue; - } - const data = res.data.split("@"); - if (data[0] != "" || data[1] != "6f6b" || data.length != 3) { - continue; - } - try { - return parseInt(data[2], 16); - } - catch (NumberFormatException) { - continue; - } - } - throw Error(`invalid result: ${results.toString()}`); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxyb25kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvZWxyb25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7OztHQUtHO0FBQ0gsZ0RBaUI4QjtBQUM5QixrREFBMEI7QUFDMUIsZ0VBQXFDO0FBQ3JDLG1DQWNpQjtBQUNqQix5Q0FBbUM7QUFJbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFPLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUN0RyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQXNDNUMsU0FBUyxhQUFhLENBQUMsS0FBdUI7SUFDNUMsT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztBQUM1RCxDQUFDO0FBZ0RBLENBQUM7QUF1RkY7Ozs7Ozs7O0dBUUc7QUFDSSxNQUFNLG1CQUFtQixHQUtILEtBQUssRUFDaEMsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsTUFBTSxxQkFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLGVBQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxRQUFRO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFFbEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLE1BQWUsRUFBRSxFQUFFO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsTUFBZSxFQUFFLEVBQWUsRUFBRSxFQUFFO1FBQzdELE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJO1lBQ0EsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ3pDLE1BQU0sMkJBQW1CLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTixNQUFNLENBQUMsQ0FBQzthQUNSO1NBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQTtJQUVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLE9BQXdCLEVBQUUsRUFBRTtRQUMzRCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQztRQUNyRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFWCxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDcEIsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNYLElBQUksR0FBRyxDQUFDO1lBQ1Isb0JBQW9CO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDM0MsU0FBUzthQUNUO1lBQ0UsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hDLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7YUFDckM7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDM0MsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxFQUFFO2dCQUNsQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTO2FBQ1Y7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2xDLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7YUFDckM7WUFFRCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVKLE1BQU0sS0FBSyxDQUFDLG1EQUFtRCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQTtJQUVELE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsV0FBbUIsRUFDbkIsRUFBVSxFQUNWLEtBQWtCLEVBQ2xCLEVBQUU7UUFFRixPQUFPLElBQUksbUJBQVcsQ0FBQztZQUNyQixRQUFRLEVBQUUsWUFBWTtZQUN0QixRQUFRLEVBQUUsSUFBSSxnQkFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxLQUFLLEVBQUUsSUFBSSxlQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksRUFBRSwwQkFBa0IsQ0FBQyxZQUFZLEVBQUU7aUJBQ3BDLFdBQVcsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMvQyxNQUFNLENBQUMsSUFBSSxnQkFBUSxDQUFDLElBQUksc0JBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2lCQUNoRCxNQUFNLENBQUMsSUFBSSxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ2hELEtBQUssRUFBRTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsS0FBYyxFQUNkLEVBQ0UsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNULElBQUksRUFDSixLQUFLLEVBQ0wsSUFBSSxFQUNTLEVBQ2YsRUFBRTtRQUNGLElBQUksUUFBUSxHQUFHLDBCQUFrQixDQUFDLFlBQVksRUFBRTthQUM3QyxXQUFXLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNsRCxNQUFNLENBQUMsSUFBSSw0QkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ2xFLE1BQU0sQ0FBQyxJQUFJLG9CQUFZLENBQUMsSUFBSSxzQkFBUyxDQUFDLFFBQVEsYUFBUixRQUFRLGNBQVIsUUFBUSxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxJQUFJLGdCQUFRLENBQUMsSUFBSSxzQkFBUyxDQUFDLFNBQVMsYUFBVCxTQUFTLGNBQVQsU0FBUyxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0UsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxJQUFJLG1CQUFXLENBQUM7WUFDckIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsSUFBSSxnQkFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxNQUFNLHNCQUFzQixHQUFHLENBQzdCLFdBQW1CLEVBQ25CLE9BQWdCLEVBQ2hCLEVBQVUsRUFDVixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVcsRUFDekIsRUFBRTtRQUNGLE9BQU8sSUFBSSxtQkFBVyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLGdCQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksRUFBRSwwQkFBa0IsQ0FBQyxZQUFZLEVBQUU7aUJBQ3BDLFdBQVcsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ3BELE1BQU0sQ0FBQyxJQUFJLDRCQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzdELE1BQU0sQ0FBQyxJQUFJLGdCQUFRLENBQUMsSUFBSSxzQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFZLENBQUMsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3RDLE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDN0QsTUFBTSxDQUFDLElBQUksZ0JBQVEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztpQkFDaEQsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNoRCxLQUFLLEVBQUU7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixNQUFNLHNCQUFzQixHQUFHLENBQzdCLE9BQWdCLEVBQ2hCLEVBQVUsRUFDVixFQUFVLEVBQ1YsRUFBRTtRQUNGLE9BQU8sSUFBSSxtQkFBVyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLGdCQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksRUFBRSwwQkFBa0IsQ0FBQyxZQUFZLEVBQUU7aUJBQ3BDLFdBQVcsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ3BELE1BQU0sQ0FBQyxJQUFJLDRCQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM1QyxNQUFNLENBQUMsSUFBSSxnQkFBUSxDQUFDLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN2QyxNQUFNLENBQUMsSUFBSSxvQkFBWSxDQUFDLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQyxNQUFNLENBQUMsSUFBSSxvQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUN0QyxNQUFNLENBQUMsSUFBSSxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzNELE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDaEQsS0FBSyxFQUFFO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixXQUFtQixFQUN0QixPQUFnQixFQUNiLEVBQVUsRUFDVixLQUFrQixFQUNsQixFQUFFO1FBQ0YsT0FBTyxJQUFJLG1CQUFXLENBQUM7WUFDckIsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLElBQUksZ0JBQVEsQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxFQUFFLDBCQUFrQixDQUFDLFlBQVksRUFBRTtpQkFDcEMsV0FBVyxDQUFDLElBQUksd0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDcEQsTUFBTSxDQUFDLElBQUksNEJBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3pDLE1BQU0sQ0FBQyxJQUFJLGdCQUFRLENBQUMsSUFBSSxzQkFBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQ2hELE1BQU0sQ0FBQyxJQUFJLG9CQUFZLENBQUMsSUFBSSxzQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ3BELE1BQU0sQ0FBQyxJQUFJLG9CQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2hDLE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDeEQsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNoRCxLQUFLLEVBQUU7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQThDLENBQUM7UUFFekUsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDLENBQUE7SUFFRCxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWE7UUFDckMsTUFBTSxJQUFJLEdBQWlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVqRixNQUFNLE1BQU0sR0FBc0UsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFOztZQUNqRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBRUQsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLEtBQUssR0FBRyxNQUFBLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUNBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNyRSxDQUFDLENBQUE7UUFFQSxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBR0QsTUFBTSxvQkFBb0IsR0FBSSxDQUMxQixJQUFZLEVBQ1osTUFBYyxFQUNkLFNBQThCLEVBQzlCLE9BQTRCLEVBQzVCLHdCQUE2QyxFQUMvQyxFQUFFO1FBQ0wsSUFBSSxRQUFRLEdBQUcsMEJBQWtCLENBQUMsWUFBWSxFQUFFO2FBQ3hDLFdBQVcsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDckQsTUFBTSxDQUFDLElBQUksNEJBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUM1RCxNQUFNLENBQUMsSUFBSSw0QkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkUsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQzVCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUMxRSxNQUFNLENBQUMsSUFBSSxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUU7UUFDRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDekIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3hFLE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RTtRQUNELElBQUksd0JBQXdCLEtBQUssU0FBUyxFQUFFO1lBQzNDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3pGLE1BQU0sQ0FBQyxJQUFJLGtCQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdGO1FBRUUsT0FBTyxJQUFJLG1CQUFXLENBQUM7WUFDckIsUUFBUSxFQUFFLGVBQWU7WUFDekIsS0FBSyxFQUFFLElBQUksZUFBTyxDQUFDLGVBQWUsQ0FBQztZQUNuQyxRQUFRLEVBQUUsSUFBSSxnQkFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFHRixNQUFNLG9CQUFvQixHQUFHLENBQzVCLEtBQWEsRUFDYixNQUFlLEVBQ2YsS0FBaUIsRUFDaEIsRUFBRTtRQUNGLElBQUksUUFBUSxHQUFHLDBCQUFrQixDQUFDLFlBQVksRUFBRTthQUNoRCxXQUFXLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ25ELE1BQU0sQ0FBQyxJQUFJLDRCQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNwRCxNQUFNLENBQUMsSUFBSSxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDM0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUVELE9BQU8sSUFBSSxtQkFBVyxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLGdCQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFO1NBQ3RCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQTtJQUVGLEtBQUssVUFBVSxZQUFZLENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFVO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWtCLEVBQUUsRUFBRTtRQUM3Qyx3REFBd0Q7UUFDbkQsMERBQTBEO1FBQzFELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUNuQztRQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDcEM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFELG9CQUFvQjtRQUNwQix1Q0FBdUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQTtJQUVELEtBQUssVUFBVSxTQUFTLENBQUMsRUFBZTtRQUN2QyxJQUFJLEdBQUcsQ0FBQztRQUNSLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVsRCxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUV0RCxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPO1FBQ0wsWUFBWSxFQUFFLGlCQUFpQjtRQUMvQixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIsa0JBQWtCO1FBQ25CLG9CQUFvQjtRQUNuQixLQUFLLENBQUMsT0FBTyxDQUNYLE9BQXlCO1lBRXpCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTyxDQUFDLElBQUksZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFakQsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTVCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0osS0FBSyxDQUFDLG1CQUFtQixDQUN4QixPQUF5QixFQUN6QixZQUFzQjtZQUV0QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksc0JBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTthQUN2SDtZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUNFLEtBQUssQ0FBQyx1QkFBdUIsQ0FDM0IsTUFBZSxFQUNmLFdBQW1CLEVBQ25CLEVBQVUsRUFDVixLQUFrQjtZQUVsQixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3ZELE1BQU0sRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUU3QyxPQUFPLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxLQUFLLENBQUMsZUFBZSxDQUNuQixNQUFlLEVBQ2YsV0FBbUIsRUFDbkIsRUFBVSxFQUNWLEtBQWtCO1lBRWxCLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdFLE1BQU0sRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUxQyxPQUFPLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLE1BQWUsRUFDZixXQUFtQixFQUNuQixFQUFVLEVBQ1YsSUFBYTtZQUViLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9FLE1BQU0sRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUxQyxPQUFPLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLE1BQWUsRUFDZixFQUFVLEVBQ1YsS0FBYTtZQUViLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsTUFBTSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sTUFBTSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELG9CQUFvQjtRQUNwQixLQUFLLENBQUMsWUFBWSxDQUNoQixNQUFlLEVBQ2YsSUFBWSxFQUNaLE1BQWMsRUFDZCxZQUFxQixLQUFLLEVBQzFCLFVBQW1CLEtBQUssRUFDeEIsMkJBQW9DLEtBQUs7WUFFekMsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFFN0YsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQWMsRUFDZCxJQUFrQjtZQUVsQixNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFekQsTUFBTSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPO1FBQ1YsWUFBWTtRQUNaLEtBQUssQ0FBQyxXQUFXLENBQ2YsT0FBZ0IsRUFDaEIsS0FBYSxFQUNiLE1BQWUsRUFDWixLQUFpQjtZQUVqQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTFELE1BQU0sV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsZ0JBQWdCLENBQ2YsUUFBcUI7WUFFckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3pCLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDeEM7WUFDRCxPQUFPO2dCQUNOLDhCQUE4QjtnQkFDOUIsV0FBVyxFQUFFLGtCQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksRUFBRSxrQkFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDLENBQUE7UUFDRixDQUFDO1FBQ0QsS0FBSyxDQUFDLGdCQUFnQixDQUNyQixJQUFnQjtZQUVoQixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN6QixNQUFNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsT0FBTyxrQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNDLENBQUM7QUFDSixDQUFDLENBQUM7QUExYlcsUUFBQSxtQkFBbUIsdUJBMGI5QjtBQUVGLFNBQVMsYUFBYSxDQUFDLE9BQTJCO0lBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixTQUFTO1NBQ1Y7UUFDRCxNQUFNLElBQUksR0FBSSxHQUFHLENBQUMsSUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUMxRCxTQUFTO1NBQ1Y7UUFFRCxJQUFJO1lBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBQUMsT0FBTyxxQkFBcUIsRUFBRTtZQUM5QixTQUFTO1NBQ1Y7S0FDRjtJQUVELE1BQU0sS0FBSyxDQUFDLG1CQUFtQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELENBQUMifQ== \ No newline at end of file diff --git a/dist/helpers/polkadot.d.ts b/dist/helpers/polkadot.d.ts deleted file mode 100644 index 7790ab49e..000000000 --- a/dist/helpers/polkadot.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Address, H256, Hash, LookupSource } from "@polkadot/types/interfaces"; -import BigNumber from "bignumber.js"; -import { TransferForeign, TransferNftForeign, UnfreezeForeign, UnfreezeForeignNft, BalanceCheck, MintNft, ListNft, GetLockedNft, WrappedBalanceCheck, BatchWrappedBalanceCheck, DecodeWrappedNft, DecodeRawNft } from "./chain"; -import { AddressOrPair } from "@polkadot/api/types"; -import { SignerOptions } from "@polkadot/api/submittable/types"; -/** - * Type of sender expected by this module - * - * @param sender Address of the sender, or a Keypair - * @param options Options for sigining this transaction. Mandatory if sender is an address - */ -export declare type Signer = { - sender: AddressOrPair; - options?: Partial; -}; -declare type EasyBalance = string | number | BigNumber; -declare type EasyAddr = string | LookupSource | Address; -declare type BasePolkadot = BalanceCheck; -/** - * identifier for tracking an action - */ -declare type EventIdent = BigNumber; -export declare type PolkadotHelper = BasePolkadot & TransferForeign & UnfreezeForeign; -/** - * Traits implemented by this module - */ -export declare type PolkadotPalletHelper = PolkadotHelper & WrappedBalanceCheck & BatchWrappedBalanceCheck & TransferNftForeign & UnfreezeForeignNft & MintNft & ListNft & GetLockedNft & DecodeWrappedNft & DecodeRawNft; -/** - * @internal - */ -export declare function toHex(buffer: Uint8Array): string; -/** - * Create an object implementing Cross Chain utilities for Polkadot - * - * @param node_uri URI of the polkadot node - */ -export declare const polkadotPalletHelperFactory: (node_uri: string) => Promise; -export {}; diff --git a/dist/helpers/polkadot.js b/dist/helpers/polkadot.js deleted file mode 100644 index 7c4c1bcb9..000000000 --- a/dist/helpers/polkadot.js +++ /dev/null @@ -1,196 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.polkadotPalletHelperFactory = exports.toHex = void 0; -/** - * Polkadot Implementation for cross chain traits - * @module - */ -const api_1 = require("@polkadot/api"); -const bignumber_js_1 = __importDefault(require("bignumber.js")); -const chain_1 = require("./chain"); -const types_1 = require("@polkadot/types"); -const encoding_1 = require("validator/dist/encoding"); -const LUT_HEX_4b = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; -const LUT_HEX_8b = new Array(0x100); -for (let n = 0; n < 0x100; n++) { - LUT_HEX_8b[n] = `${LUT_HEX_4b[(n >>> 4) & 0xF]}${LUT_HEX_4b[n & 0xF]}`; -} -/** - * @internal - */ -// End Pre-Init -function toHex(buffer) { - let out = ''; - for (let idx = 0, edx = buffer.length; idx < edx; idx++) { - out += LUT_HEX_8b[buffer[idx]]; - } - return `0x${out}`; -} -exports.toHex = toHex; -async function basePolkadotHelper(node_uri) { - const provider = new api_1.WsProvider(node_uri); - const api = await api_1.ApiPromise.create({ provider, types: runtimeTypes }); - const base = { - async balance(address) { - const res = await api.query.system.account(address); - return new bignumber_js_1.default(res['data']['free'].toString()); - } - }; - return [base, api]; -} -function hasAddrField(ob) { - return ob.hasOwnField('address') && typeof ob.address == "string"; -} -async function resolve_event_id(ext, filter, signer, options) { - let call; - if (options) { - options.nonce = -1; - call = async (cb) => await ext.signAndSend(signer, options, cb); - } - else { - call = async (cb) => await ext.signAndSend(signer, { nonce: -1 }, cb); - } - const evP = new Promise((res, rej) => { - call(({ events, status }) => { - if (!status.isInBlock) { - return; - } - const ev = events.find(e => e.event.method == filter); - if (ev === undefined) { - rej(); - return; - } - const action_id = new bignumber_js_1.default(ev.event.data[0].toString()); - const hash = status.asInBlock; - res([hash, action_id]); - }); - }); - try { - return await evP; - } - catch (e) { - if (e.message.contains("Priority is too low")) { - throw chain_1.ConcurrentSendError(); - } - throw e; - } -} -/** - * Create an object implementing Cross Chain utilities for Polkadot - * - * @param node_uri URI of the polkadot node - */ -const polkadotPalletHelperFactory = async (node_uri) => { - const [base, api] = await basePolkadotHelper(node_uri); - const keyring = new api_1.Keyring(); - const sudoSigner = keyring.createFromUri("//Alice", undefined, "sr25519"); - const decoder = new TextDecoder(); - function nftListMapper([nft_id, data]) { - return [nft_id.toString(), data]; - } - async function getLockedNft(hash) { - const com = await api.query.nft.lockedCommodities(hash); - if (com.isNone) { - return undefined; - } - const [_owner, dat] = com.unwrap(); - return dat; - } - return Object.assign(Object.assign({}, base), { async balanceWrapped(address, chain_nonce) { - const res = await api.query.erc1155.balances(address, chain_nonce); - return new bignumber_js_1.default(res.toString()); - }, - async balanceWrappedBatch(address, chain_nonces) { - // Multi query with address, chain_nonce - const res = await api.query.erc1155.balances.multi(chain_nonces.map(c => [address, c])); - // Convert list of balances to [chain_nonce, balance] - return new Map(res.map((b, i) => [chain_nonces[i], b.isSome ? new bignumber_js_1.default(b.unwrap().toString()) : new bignumber_js_1.default(0)])); - }, - async transferNativeToForeign(sender, chain_nonce, to, value) { - return await resolve_event_id(api.tx.freezer.send(chain_nonce, to, value.toString()), "TransferFrozen", sender.sender, sender.options); - }, - async unfreezeWrapped(sender, chain_nonce, to, value) { - return await resolve_event_id(api.tx.freezer.withdrawWrapped(chain_nonce, to, value.toString()), "UnfreezeWrapped", sender.sender, sender.options); - }, - async transferNftToForeign(sender, chain_nonce, to, nft_id) { - return await resolve_event_id(api.tx.freezer.sendNft(chain_nonce, to, nft_id), "TransferUniqueFrozen", sender.sender, sender.options); - }, - async unfreezeWrappedNft(sender, to, nft_id) { - return await resolve_event_id(api.tx.freezer.withdrawWrappedNft(to, nft_id), "UnfreezeUniqueWrapped", sender.sender, sender.options); - }, - async mintNft(owner, info) { - let addr; - // "static typing :|" - if (typeof owner.sender == "string") { - addr = owner.sender; - } - else if (hasAddrField(owner.sender)) { - addr = owner.sender.address; - } - else { - addr = owner.sender.toString(); - } - await api.tx.sudo.sudo(api.tx.nft.mint(addr, toHex(info))).signAndSend(sudoSigner, { nonce: -1 }); - }, - async listNft(owner) { - const com = await api.query.nft.commoditiesForAccount(owner.toString()); - if (com.isNone) { - return new Map(); - } - const c = Array.from(com.unwrap()).map(nftListMapper); - return new Map(c); - }, - getLockedNft, - decodeWrappedNft(raw_data) { - const packed = encoding_1.NftPacked.deserializeBinary(Uint8Array.from(raw_data)); - return { - chain_nonce: packed.getChainNonce(), - data: packed.getData_asU8() - }; - }, - async decodeUrlFromRaw(data) { - const locked = await getLockedNft(new types_1.U8aFixed(api.registry, data, 256)); - if (locked === undefined) { - throw Error("not a locked nft"); - } - return decoder.decode(locked.slice(-24)); - } }); -}; -exports.polkadotPalletHelperFactory = polkadotPalletHelperFactory; -const runtimeTypes = { - ActionId: "u128", - TokenId: "u64", - CommodityId: "H256", - CommodityInfo: "Bytes", - NftId: "H256", - NftInfo: "Bytes", - Erc1155Balance: "Balance", - Commodity: "(H256, Bytes)", - LocalAction: { - _enum: { - //@ts-expect-error enum struct - Unfreeze: { - to: "AccountId", - value: "Balance", - }, - //@ts-expect-error enum struct - RpcCall: { - contract: "AccountId", - call_data: "Bytes", - }, - //@ts-expect-error enum struct - TransferWrapped: { - to: "AccountId", - value: "Balance", - }, - }, - }, - ActionInfo: { - action: "LocalAction", - validators: "BTreeSet", - }, -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sa2Fkb3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9wb2xrYWRvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7O0dBR0c7QUFDSCx1Q0FBZ0U7QUFHaEUsZ0VBQXFDO0FBQ3JDLG1DQWVpQjtBQUdqQiwyQ0FBeUU7QUFDekUsc0RBQW1EO0FBMENuRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUN4RTtBQUNEOztHQUVHO0FBQ0gsZUFBZTtBQUNmLFNBQWdCLEtBQUssQ0FBQyxNQUFrQjtJQUN0QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3ZELEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEM7SUFDRCxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQU5ELHNCQU1DO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUMvQixRQUFnQjtJQUVkLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLGdCQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sSUFBSSxHQUFHO1FBQ1gsS0FBSyxDQUFDLE9BQU8sQ0FDWCxPQUFpQjtZQUdqQixNQUFNLEdBQUcsR0FBUSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6RCxPQUFPLElBQUksc0JBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0tBQ0YsQ0FBQTtJQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDdEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEVBQU87SUFDM0IsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7QUFDcEUsQ0FBQztBQUVELEtBQUssVUFBVSxnQkFBZ0IsQ0FBK0IsR0FBdUMsRUFBRSxNQUFjLEVBQUUsTUFBcUIsRUFBRSxPQUFnQztJQUM1SyxJQUFJLElBQThDLENBQUM7SUFDbkQsSUFBSSxPQUFPLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBZSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5RTtTQUFNO1FBQ0wsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFlLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNwRjtJQUVELE1BQU0sR0FBRyxHQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNoRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUNyQixPQUFPO2FBQ1I7WUFFRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUM7WUFDdEQsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFO2dCQUNwQixHQUFHLEVBQUUsQ0FBQztnQkFDTixPQUFPO2FBQ1I7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBRTlCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJO1FBQ0gsT0FBTyxNQUFNLEdBQUcsQ0FBQztLQUNqQjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1gsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sMkJBQW1CLEVBQUUsQ0FBQztTQUM1QjtRQUNELE1BQU0sQ0FBQyxDQUFDO0tBQ1I7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLE1BQU0sMkJBQTJCLEdBRUgsS0FBSyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtJQUM5RCxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUVsQyxTQUFTLGFBQWEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQWdCO1FBQ25ELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssVUFBVSxZQUFZLENBQzVCLElBQVU7UUFFVixNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBa0IsQ0FBQztRQUN6RSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDZixPQUFPLFNBQVMsQ0FBQztTQUNqQjtRQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE9BQU8sR0FBWSxDQUFDO0lBQ25CLENBQUM7SUFFRCx1Q0FDSyxJQUFJLEtBQ1YsS0FBSyxDQUFDLGNBQWMsQ0FDbkIsT0FBaUIsRUFDakIsV0FBbUI7WUFFbkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sSUFBSSxzQkFBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCxLQUFLLENBQUMsbUJBQW1CLENBQ3hCLE9BQWlCLEVBQ2pCLFlBQXNCO1lBRXRCLHdDQUF3QztZQUN4QyxNQUFNLEdBQUcsR0FBa0IsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkcscURBQXFEO1lBQ3JELE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RJLENBQUM7UUFDRSxLQUFLLENBQUMsdUJBQXVCLENBQzNCLE1BQWMsRUFDZCxXQUFtQixFQUNuQixFQUFVLEVBQ1YsS0FBa0I7WUFFbEIsT0FBTyxNQUFNLGdCQUFnQixDQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDdEQsZ0JBQWdCLEVBQ2hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FDOUIsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLENBQUMsZUFBZSxDQUNuQixNQUFjLEVBQ2QsV0FBbUIsRUFDbkIsRUFBVSxFQUNWLEtBQWtCO1lBRWxCLE9BQU8sTUFBTSxnQkFBZ0IsQ0FDekIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2pFLGlCQUFpQixFQUNqQixNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQ2hDLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixNQUFjLEVBQ2QsV0FBbUIsRUFDbkIsRUFBVSxFQUNWLE1BQVk7WUFFWixPQUFPLE1BQU0sZ0JBQWdCLENBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUMvQyxzQkFBc0IsRUFDdEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUM5QixDQUFDO1FBQ0osQ0FBQztRQUNELEtBQUssQ0FBQyxrQkFBa0IsQ0FDdEIsTUFBYyxFQUNkLEVBQVUsRUFDVixNQUFZO1lBRVosT0FBTyxNQUFNLGdCQUFnQixDQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQzdDLHVCQUF1QixFQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQzlCLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUFhLEVBQ2IsSUFBZ0I7WUFFZCxJQUFJLElBQUksQ0FBQztZQUNULHFCQUFxQjtZQUNyQixJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUU7Z0JBQ25DLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQ3JCO2lCQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2hDO1lBRUQsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ25DLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBZTtZQUVmLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFrQyxDQUFDO1lBQzVHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZixPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7YUFDakI7WUFDRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDSixZQUFZO1FBQ1osZ0JBQWdCLENBQ2YsUUFBb0I7WUFFcEIsTUFBTSxNQUFNLEdBQUcsb0JBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFdEUsT0FBTztnQkFDTixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUU7YUFDM0IsQ0FBQTtRQUNGLENBQUM7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3JCLElBQWdCO1lBRWhCLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksZ0JBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDekIsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLElBQ0U7QUFDSixDQUFDLENBQUM7QUE1SVcsUUFBQSwyQkFBMkIsK0JBNEl0QztBQUVGLE1BQU0sWUFBWSxHQUFrQjtJQUNsQyxRQUFRLEVBQUUsTUFBTTtJQUNoQixPQUFPLEVBQUUsS0FBSztJQUNkLFdBQVcsRUFBRSxNQUFNO0lBQ25CLGFBQWEsRUFBRSxPQUFPO0lBQ3RCLEtBQUssRUFBRSxNQUFNO0lBQ2IsT0FBTyxFQUFFLE9BQU87SUFDaEIsY0FBYyxFQUFFLFNBQVM7SUFDekIsU0FBUyxFQUFFLGVBQWU7SUFDMUIsV0FBVyxFQUFFO1FBQ1gsS0FBSyxFQUFFO1lBQ0wsOEJBQThCO1lBQzlCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsV0FBVztnQkFDZixLQUFLLEVBQUUsU0FBUzthQUNqQjtZQUNELDhCQUE4QjtZQUM5QixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFNBQVMsRUFBRSxPQUFPO2FBQ25CO1lBQ0QsOEJBQThCO1lBQzlCLGVBQWUsRUFBRTtnQkFDZixFQUFFLEVBQUUsV0FBVztnQkFDZixLQUFLLEVBQUUsU0FBUzthQUNqQjtTQUNGO0tBQ0Y7SUFDRCxVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsYUFBYTtRQUNyQixVQUFVLEVBQUUscUJBQXFCO0tBQ2xDO0NBQ0YsQ0FBQyJ9 \ No newline at end of file diff --git a/dist/helpers/web3.d.ts b/dist/helpers/web3.d.ts deleted file mode 100644 index 672ec4ea1..000000000 --- a/dist/helpers/web3.d.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Web3 Implementation for cross chain traits - * @module - */ -import BigNumber from "bignumber.js"; -import { TransferForeign, UnfreezeForeign, UnfreezeForeignNft, BalanceCheck, TransferNftForeign, WrappedBalanceCheck, BatchWrappedBalanceCheck, DecodeWrappedNft, DecodeRawNft, MintNft } from "./chain"; -import { Signer, BigNumber as EthBN } from 'ethers'; -import { TransactionReceipt, Provider } from "@ethersproject/providers"; -import { Interface } from "ethers/lib/utils"; -declare type EasyBalance = string | number | EthBN; -/** - * Information required to perform NFT transfers in this chain - */ -export declare type EthNftInfo = { - contract_type: "ERC721" | "ERC1155"; - contract: string; - token: EthBN; -}; -/** - * Arguments required for minting a new nft - * - * contract: address of the sc - * token: token ID of the newly minted nft - * owner: Owner of the newly minted nft - * uri: uri of the nft - */ -export declare type MintArgs = { - contract: string; - token: EasyBalance; - owner: string; - uri: string; -}; -/** - * Base util traits - */ -export declare type BaseWeb3Helper = BalanceCheck & -/** - * Mint an nft in the given ERC1155 smart contract - * - * @argument signer owner of the smart contract - * @argument args See [[MintArgs]] - */ -MintNft & { - /** - * - * Deploy an ERC1155 smart contract - * - * @argument owner Owner of this smart contract - * @returns Address of the deployed smart contract - */ - deployErc1155(owner: Signer): Promise; -}; -/** - * Traits implemented by this module - */ -export declare type Web3Helper = BaseWeb3Helper & WrappedBalanceCheck & BatchWrappedBalanceCheck & TransferForeign & TransferNftForeign & UnfreezeForeign & UnfreezeForeignNft & DecodeWrappedNft & DecodeRawNft & { - /** - * Get the uri of an nft given nft info - */ - nftUri(info: EthNftInfo): Promise; -}; -/** - * Create an object implementing minimal utilities for a web3 chain - * - * @param provider An ethers.js provider object - */ -export declare function baseWeb3HelperFactory(provider: Provider): Promise; -/** - * Create an object implementing cross chain utilities for a web3 chain - * - * @param provider An ethers.js provider object - * @param minter_addr Address of the minter smart contract - * @param minter_abi ABI of the minter smart contract - */ -export declare function web3HelperFactory(provider: Provider, minter_addr: string, minter_abi: Interface, erc1155_addr: string): Promise; -export {}; diff --git a/dist/helpers/web3.js b/dist/helpers/web3.js deleted file mode 100644 index 6b9ac8d34..000000000 --- a/dist/helpers/web3.js +++ /dev/null @@ -1,167 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.web3HelperFactory = exports.baseWeb3HelperFactory = void 0; -/** - * Web3 Implementation for cross chain traits - * @module - */ -const bignumber_js_1 = __importDefault(require("bignumber.js")); -const ethers_1 = require("ethers"); -const utils_1 = require("ethers/lib/utils"); -const fakeERC721_json_1 = require("../fakeERC721.json"); -const fakeERC1155_json_1 = require("../fakeERC1155.json"); -const ERC1155_contract = __importStar(require("../XPNet.json")); -const encoding_1 = require("validator/dist/encoding"); -const js_base64_1 = require("js-base64"); -function contractTypeFromNftKind(kind) { - return kind === encoding_1.NftEthNative.NftKind.ERC721 ? "ERC721" : "ERC1155"; -} -/** - * Create an object implementing minimal utilities for a web3 chain - * - * @param provider An ethers.js provider object - */ -async function baseWeb3HelperFactory(provider) { - const w3 = provider; - const erc1155_abi = new utils_1.Interface(fakeERC1155_json_1.abi); - return { - async balance(address) { - const bal = await w3.getBalance(address); - // ethers BigNumber is not compatible with our bignumber - return new bignumber_js_1.default(bal.toString()); - }, - async deployErc1155(owner) { - const factory = ethers_1.ContractFactory.fromSolidity(ERC1155_contract, owner); - const contract = await factory.deploy(); - return contract.address; - }, - async mintNft(contract_owner, { contract, token, owner, uri }) { - const erc1155 = new ethers_1.Contract(contract, erc1155_abi, contract_owner); - await erc1155.mint(owner, ethers_1.BigNumber.from(token.toString()), 1); - await erc1155.setURI(token, uri); - } - }; -} -exports.baseWeb3HelperFactory = baseWeb3HelperFactory; -/** - * Create an object implementing cross chain utilities for a web3 chain - * - * @param provider An ethers.js provider object - * @param minter_addr Address of the minter smart contract - * @param minter_abi ABI of the minter smart contract - */ -async function web3HelperFactory(provider, minter_addr, minter_abi, erc1155_addr) { - const w3 = provider; - const minter = new ethers_1.Contract(minter_addr, minter_abi, w3); - const erc1155_abi = new utils_1.Interface(fakeERC1155_json_1.abi); - const erc1155 = new ethers_1.Contract(erc1155_addr, erc1155_abi, w3); - function signedMinter(signer) { - return minter.connect(signer); - } - async function extractTxn(txr, _evName) { - const receipt = await txr.wait(); - const log = receipt.logs.find((log) => log.address === minter.address); - if (log === undefined) { - throw Error("Couldn't extract action_id"); - } - const evdat = minter_abi.parseLog(log); - const action_id = evdat.args[0].toString(); - return [receipt, action_id]; - } - async function nftUri(info) { - if (info.contract_type == "ERC721") { - const erc = new ethers_1.Contract(info.contract, fakeERC721_json_1.abi, w3); - return await erc.tokenURI(info.token); - } - else { - const erc = new ethers_1.Contract(info.contract, erc1155_abi, w3); - return await erc.uri(info.token); - } - } - const base = await baseWeb3HelperFactory(provider); - return Object.assign(Object.assign({}, base), { async balanceWrapped(address, chain_nonce) { - const bal = await erc1155.balanceOf(address, chain_nonce); - return new bignumber_js_1.default(bal.toString()); - }, - async balanceWrappedBatch(address, chain_nonces) { - const bals = await erc1155.balanceOfBatch(Array(chain_nonces.length).fill(address), chain_nonces); - return new Map(bals.map((v, i) => [chain_nonces[i], new bignumber_js_1.default(v.toString())])); - }, - async transferNativeToForeign(sender, chain_nonce, to, value) { - const res = await signedMinter(sender) - .freeze(chain_nonce, to, { value }); - return await extractTxn(res, 'Transfer'); - }, - async transferNftToForeign(sender, chain_nonce, to, id) { - let txr; - let ev; - const calldata = Buffer.concat([ - Buffer.from((new Int32Array([0])).buffer), - Buffer.from((new Int32Array([chain_nonce])).buffer).reverse(), - Buffer.from(to, "utf-8") - ]); - if (id.contract_type == "ERC721") { - ev = "TransferErc721"; - const erc = new ethers_1.Contract(id.contract, fakeERC721_json_1.abi, w3); - txr = await erc.connect(sender)['safeTransferFrom(address,address,uint256,bytes)'](await sender.getAddress(), minter_addr, id.token, calldata); - } - else { - ev = "TransferErc1155"; - const erc = new ethers_1.Contract(id.contract, erc1155_abi, w3); - txr = await erc.connect(sender).safeTransferFrom(await sender.getAddress(), minter_addr, id.token, ethers_1.BigNumber.from(1), calldata); - } - return await extractTxn(txr, ev); - }, - async unfreezeWrapped(sender, chain_nonce, to, value) { - const res = await signedMinter(sender) - .withdraw(chain_nonce, to, value); - return await extractTxn(res, 'Unfreeze'); - }, - async unfreezeWrappedNft(sender, to, id) { - const res = await signedMinter(sender) - .withdraw_nft(to, id); - return await extractTxn(res, 'UnfreezeNft'); - }, - nftUri, - decodeWrappedNft(raw_data) { - const u8D = js_base64_1.Base64.toUint8Array(raw_data); - const packed = encoding_1.NftPacked.deserializeBinary(u8D); - return { - chain_nonce: packed.getChainNonce(), - data: packed.getData_asU8() - }; - }, - async decodeUrlFromRaw(data) { - const packed = encoding_1.NftEthNative.deserializeBinary(data); - const nft_info = { - contract_type: contractTypeFromNftKind(packed.getNftKind()), - contract: packed.getContractAddr(), - token: ethers_1.BigNumber.from(packed.getId()) - }; - return await nftUri(nft_info); - } }); -} -exports.web3HelperFactory = web3HelperFactory; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL3dlYjMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7R0FHRztBQUNILGdFQUFxQztBQUVyQyxtQ0FBK0U7QUFFL0UsNENBQTZDO0FBQzdDLHdEQUF1RDtBQUN2RCwwREFBeUQ7QUFDekQsZ0VBQWtEO0FBQ2xELHNEQUFnRTtBQUNoRSx5Q0FBbUM7QUFpRW5DLFNBQVMsdUJBQXVCLENBQUMsSUFBVztJQUMzQyxPQUFPLElBQUksS0FBSyx1QkFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0FBQ25FLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLHFCQUFxQixDQUMxQyxRQUFrQjtJQUVsQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHNCQUFXLENBQUMsQ0FBQztJQUUvQyxPQUFPO1FBQ0EsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFlO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6Qyx3REFBd0Q7WUFDeEQsT0FBTyxJQUFJLHNCQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNQLEtBQUssQ0FBQyxhQUFhLENBQ2xCLEtBQWE7WUFFYixNQUFNLE9BQU8sR0FBRyx3QkFBZSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUV4QyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDekIsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPLENBQ1gsY0FBc0IsRUFDdkIsRUFDQyxRQUFRLEVBQ1IsS0FBSyxFQUNMLEtBQUssRUFDTCxHQUFHLEVBQ087WUFFWCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFRLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNwRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUNELENBQUE7QUFDRixDQUFDO0FBbkNELHNEQW1DQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDdEMsUUFBa0IsRUFDZixXQUFtQixFQUNuQixVQUFxQixFQUN4QixZQUFvQjtJQUVqQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFFcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBUSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHNCQUFXLENBQUMsQ0FBQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFRLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV6RCxTQUFTLFlBQVksQ0FBQyxNQUFjO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUosS0FBSyxVQUFVLFVBQVUsQ0FBQyxHQUF3QixFQUFFLE9BQWU7UUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUN0QixNQUFNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssVUFBVSxNQUFNLENBQ3BCLElBQWdCO1FBRWhCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxRQUFRLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RCxPQUFPLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDaEM7SUFDRixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVoRCx1Q0FDQyxJQUFJLEtBQ1AsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFlLEVBQUUsV0FBbUI7WUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUUxRCxPQUFPLElBQUksc0JBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxZQUFzQjtZQUNoRSxNQUFNLElBQUksR0FBWSxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFM0csT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDSyxLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1lBQ3RHLE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQztpQkFDcEMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDUCxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsRUFBVSxFQUFFLEVBQWM7WUFDekYsSUFBSSxHQUFHLENBQUM7WUFDUixJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQzthQUN4QixDQUFDLENBQUM7WUFFSCxJQUFJLEVBQUUsQ0FBQyxhQUFhLElBQUksUUFBUSxFQUFFO2dCQUNqQyxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLHFCQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RELEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsaURBQWlELENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMvSTtpQkFBTTtnQkFDTixFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM1SDtZQUVELE9BQU8sTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDSyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtZQUNyRixNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUM7aUJBQ2pDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRS9DLE9BQU8sTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDUCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBYyxFQUFFLEVBQVUsRUFBRSxFQUFhO1lBQ2pFLE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQztpQkFDcEMsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV2QixPQUFPLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsTUFBTTtRQUNOLGdCQUFnQixDQUNmLFFBQWdCO1lBRWhCLE1BQU0sR0FBRyxHQUFHLGtCQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLG9CQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFHaEQsT0FBTztnQkFDTixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUU7YUFDM0IsQ0FBQTtRQUNGLENBQUM7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3JCLElBQWdCO1lBRWhCLE1BQU0sTUFBTSxHQUFHLHVCQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUc7Z0JBQ2hCLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzNELFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUNsQyxLQUFLLEVBQUUsa0JBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2pDLENBQUE7WUFHRCxPQUFPLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUMsSUFDRTtBQUNMLENBQUM7QUF4SEQsOENBd0hDIn0= \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index ff67f35ee..000000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./helpers/chain"; -export * from "./helpers/polkadot"; -export * from "./helpers/elrond"; -export * from "./helpers/web3"; -export * from "./socket"; diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index db333d15b..000000000 --- a/dist/index.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./helpers/chain"), exports); -__exportStar(require("./helpers/polkadot"), exports); -__exportStar(require("./helpers/elrond"), exports); -__exportStar(require("./helpers/web3"), exports); -__exportStar(require("./socket"), exports); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQWdDO0FBQ2hDLHFEQUFtQztBQUNuQyxtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLDJDQUF5QiJ9 \ No newline at end of file diff --git a/dist/socket.d.ts b/dist/socket.d.ts deleted file mode 100644 index 04ce4c8c6..000000000 --- a/dist/socket.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ManagerOptions, SocketOptions } from "socket.io-client"; -/** - * Tracker for cross chain transaction - */ -export declare type TxnSocketHelper = { - /** - * - * @param chain Nonce of the target chain - * @param action_id Identifier for tracking a cross chain transaction - * @returns transaction hash on the foreign chain - */ - waitTxHash(chain: number, action_id: string): Promise; -}; -/** - * Create a [[TxnSocketHelper]] - * - * @param uri URI of the Migration-Validator socket api - * @param options socket.io options - */ -export declare function txnSocketHelper(uri: string, options?: Partial): TxnSocketHelper; diff --git a/dist/socket.js b/dist/socket.js deleted file mode 100644 index adf6bde55..000000000 --- a/dist/socket.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.txnSocketHelper = void 0; -const socket_io_client_1 = require("socket.io-client"); -function txResBuf() { - const inner = {}; - const requireChain = (chain_id) => { - if (inner[chain_id] === undefined) { - inner[chain_id] = {}; - } - }; - return { - getResolver(chain_id, action_id) { - var _a; - requireChain(chain_id); - return (_a = inner[chain_id][action_id]) === null || _a === void 0 ? void 0 : _a.resolve; - }, - setResolver(chain_id, action_id, resolver) { - requireChain(chain_id); - inner[chain_id][action_id] = { resolve: resolver }; - }, - getEventRes(chain_id, action_id) { - var _a; - requireChain(chain_id); - return (_a = inner[chain_id][action_id]) === null || _a === void 0 ? void 0 : _a.event_res; - }, - setEventRes(chain_id, action_id, res) { - requireChain(chain_id); - inner[chain_id][action_id] = { event_res: res }; - }, - unsetAction(chain_id, action_id) { - requireChain(chain_id); - inner[chain_id][action_id] = undefined; - } - }; -} -/** - * Create a [[TxnSocketHelper]] - * - * @param uri URI of the Migration-Validator socket api - * @param options socket.io options - */ -function txnSocketHelper(uri, options) { - const socket = socket_io_client_1.io(uri, options); - const buf = txResBuf(); - function add_event(chain, id, hash) { - const resolve = buf.getResolver(chain, id); - if (resolve === undefined) { - buf.setEventRes(chain, id, hash); - return; - } - resolve(hash); - } - socket.on("tx_executed_event", (chain, action_id, hash) => { - add_event(chain, action_id, hash); - }); - return { - async waitTxHash(chain, action_id) { - const hash = buf.getEventRes(chain, action_id); - if (hash !== undefined) { - buf.unsetAction(chain, action_id); - return hash; - } - const hashP = new Promise(r => { - buf.setResolver(chain, action_id, r); - }); - return await hashP; - } - }; -} -exports.txnSocketHelper = txnSocketHelper; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBcUU7QUFrQ3JFLFNBQVMsUUFBUTtJQUNoQixNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBRWhDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1FBQ3pDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3JCO0lBQ0YsQ0FBQyxDQUFBO0lBRUQsT0FBTztRQUNOLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOztZQUM5QyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkIsT0FBTyxNQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsMENBQUUsT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFDRCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLFFBQWdDO1lBQ2hGLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV2QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUNELFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOztZQUM5QyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkIsT0FBTyxNQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsMENBQUUsU0FBUyxDQUFDO1FBQzlDLENBQUM7UUFDRCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLEdBQVc7WUFDM0QsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBaUI7WUFDOUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDeEMsQ0FBQztLQUNELENBQUE7QUFDRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFFLE9BQWlEO0lBQzFGLE1BQU0sTUFBTSxHQUFHLHFCQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFhLFFBQVEsRUFBRSxDQUFDO0lBRTlCLFNBQVMsU0FBUyxDQUFDLEtBQWEsRUFBRSxFQUFVLEVBQUUsSUFBWTtRQUM1RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDMUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE9BQU87U0FDUDtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUNMLG1CQUFtQixFQUNuQixDQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLElBQVksRUFBRSxFQUFFO1FBQy9DLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FDSixDQUFDO0lBR0YsT0FBTztRQUNULEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBYSxFQUFFLFNBQWlCO1lBQ2hELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2FBQ1o7WUFFRCxNQUFNLEtBQUssR0FBb0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxLQUFLLENBQUM7UUFDcEIsQ0FBQztLQUNHLENBQUE7QUFDTixDQUFDO0FBcENELDBDQW9DQyJ9 \ No newline at end of file diff --git a/package.json b/package.json index bc28c6d0e..8ce7d6707 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,83 @@ { - "name": "testsuite-ts", - "version": "1.0.0", - "author": "rupansh ", + "name": "xp.network", + "version": "4.1.0", + "author": "xp-network ", + "description": "XP.Network Multi-Chain NFT Bridge JavaScript API", "main": "dist/index.js", "types": "dist/index.d.ts", + "type": "commonjs", "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/XP-NETWORK/xpjs" + }, "scripts": { - "build": "tsc -p tsconfig.json" + "build": "tsc -p tsconfig.json", + "format": "prettier . --write", + "prepare": "husky install" }, "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^18.7.13", + "@typescript-eslint/eslint-plugin": "^4.31.0", "@typescript-eslint/parser": "^4.28.3", + "dotenv": "^16.0.0", "eslint": "^7.30.0", "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.2.1", + "husky": "^8.0.0", "prettier": "^2.3.2", - "typedoc": "^0.21.0", - "typescript": "^4.3.5" + "pretty-quick": "^3.1.3", + "typedoc": "^0.22.6", + "typescript": "^4.9.3", + "yarn-audit-fix": "^9.3.7" }, "dependencies": { - "@elrondnetwork/erdjs": "^6.2.0", - "@polkadot/api": "^5.2.1", - "@polkadot/api-contract": "^5.2.1", - "@polkadot/keyring": "^7.0.3", - "@polkadot/types": "^5.2.1", - "@polkadot/util": "^7.1.1", - "@polkadot/util-crypto": "^7.1.1", + "@dfinity/agent": "^0.11.3", + "@dfinity/candid": "^0.11.3", + "@dfinity/identity": "^0.12.2", + "@dfinity/nns": "^0.5.0", + "@dfinity/principal": "^0.11.3", + "@elrondnetwork/erdjs": "9.0.3", + "@ethersproject/providers": "^5.7.0", + "@hashgraph/hethers": "1.1.2", + "@hashgraph/sdk": "^2.23.0", + "@json-rpc-tools/utils": "^1.7.6", + "@metaplex-foundation/js": "0.17.6", + "@multiversx/sdk-core": "^11.4.1", + "@project-serum/anchor": "^0.25.0-beta.1", + "@randlabs/myalgo-connect": "^1.1.1", + "@solana/spl-token": "^0.2.0", + "@solana/web3.js": "^1.44.2", + "@taquito/signer": "^13.0.0", + "@taquito/taquito": "^13.0.0", + "@taquito/tzip12": "^13.0.0", + "@taquito/utils": "^13.0.1", + "@vechain/connex-driver": "^2.0.8", + "@vechain/connex-framework": "^2.0.8", + "@vechain/ethers": "^4.0.27-5", + "@walletconnect/client": "^1.7.0", + "algosdk": "^1.15.0-beta.1", + "aptos": "^1.6.0", "axios": "^0.21.1", - "bignumber.js": "^9.0.1", - "ethers": "^5.4.1", + "base64url": "^3.0.1", + "bignumber.js": "=9.0.1", + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "crypto-exchange-rate": "git+https://github.com/xp-network/exchange-rate#a2915673342ee33aedd1cb4a12b304c36f55fa15", + "ethers": "^5.5.4", + "google-protobuf": "^3.20.1", "js-base64": "^3.6.1", + "near-api-js": "1.0.0", + "secretjs": "=1.4.7", "socket.io-client": "^4.1.3", - "validator": "git+https://github.com/xp-network/migration-validator#master" + "ton-x": "^2.0.0", + "tonweb": "^0.0.57", + "tonweb-mnemonic": "^1.0.1", + "tronstation": "^1.0.1", + "tronweb": "^4.1.0", + "web3-providers-connex": "^0.3.1", + "xpnet-web3-contracts": "git+https://github.com/xp-network/XP.network-HECO-Migration#aa9473ea3b0f748bba54f5755abcfd17e3548237" } } diff --git a/src/XPNet.json b/src/XPNet.json deleted file mode 100644 index c280aaff5..000000000 --- a/src/XPNet.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "XPNet", - "sourceName": "contracts/XPNet.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "uri_", - "type": "string" - } - ], - "name": "setURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000259565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015290620001f4565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b600060028204905060018216806200020d57607f821691505b602082108114156200022457620002236200022a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6133c680620002696000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c8063862440e21161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b8063862440e2146101f05780638da5cb5b1461020c578063a22cb4651461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632eb2c2d61461019a5780634e1273f4146101b6578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b610108600480360381019061010391906121ed565b6102ca565b6040516101159190612a3b565b60405180910390f35b610138600480360381019061013391906122e4565b610393565b604051610145919061281e565b60405180910390f35b61016860048036038101906101639190612336565b610475565b6040516101759190612839565b60405180910390f35b61019860048036038101906101939190612229565b61051a565b005b6101b460048036038101906101af9190612063565b6105b6565b005b6101d060048036038101906101cb9190612278565b610657565b6040516101dd91906127c5565b60405180910390f35b6101ee610808565b005b61020a6004803603810190610205919061235f565b610890565b005b610214610934565b60405161022191906126e8565b60405180910390f35b610244600480360381019061023f91906121b1565b61095e565b005b610260600480360381019061025b9190612027565b610adf565b60405161026d919061281e565b60405180910390f35b610290600480360381019061028b9190612122565b610b73565b005b6102ac60048036038101906102a79190611ffe565b610c14565b005b6102c860048036038101906102c39190612229565b610d0c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061289b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610d98565b5b9050919050565b606060046000838152602001908152602001600020805461049590612caa565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190612caa565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b50505050509050919050565b610522610e02565b73ffffffffffffffffffffffffffffffffffffffff16610540610934565b73ffffffffffffffffffffffffffffffffffffffff1614610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d9061299b565b60405180910390fd5b6105b183838360405180602001604052806000815250610e0a565b505050565b6105be610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106045750610603856105fe610e02565b610adf565b5b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061293b565b60405180910390fd5b6106508585858585610fa0565b5050505050565b6060815183511461069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610694906129db565b60405180910390fd5b6000835167ffffffffffffffff8111156106e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561070e5781602001602082028036833780820191505090505b50905060005b84518110156107fd576107a7858281518110610759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061079a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516102ca565b8282815181106107e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806107f690612d0d565b9050610714565b508091505092915050565b610810610e02565b73ffffffffffffffffffffffffffffffffffffffff1661082e610934565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b9061299b565b60405180910390fd5b61088e6000611300565b565b610898610e02565b73ffffffffffffffffffffffffffffffffffffffff166108b6610934565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109039061299b565b60405180910390fd5b818160046000868152602001908152602001600020919061092e929190611d14565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661097d610e02565b73ffffffffffffffffffffffffffffffffffffffff1614156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129bb565b60405180910390fd5b80600160006109e1610e02565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a8e610e02565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ad3919061281e565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b7b610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc085610bbb610e02565b610adf565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906128fb565b60405180910390fd5b610c0d85858585856113c6565b5050505050565b610c1c610e02565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610934565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061299b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906128bb565b60405180910390fd5b610d0981611300565b50565b610d14610e02565b73ffffffffffffffffffffffffffffffffffffffff16610d32610934565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061299b565b60405180910390fd5b610d93838383611648565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190612a1b565b60405180910390fd5b6000610e84610e02565b9050610ea581600087610e9688611865565b610e9f88611865565b8761192b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f049190612b9e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051610f82929190612a56565b60405180910390a4610f9981600087878787611933565b5050505050565b8151835114610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb906129fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061291b565b60405180910390fd5b600061105e610e02565b905061106e81878787878761192b565b60005b845181101561126b5760008582815181106110b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061297b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112509190612b9e565b925050819055505050508061126490612d0d565b9050611071565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112e29291906127e7565b60405180910390a46112f8818787878787611b1a565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061291b565b60405180910390fd5b6000611440610e02565b905061146081878761145188611865565b61145a88611865565b8761192b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061297b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ac9190612b9e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611629929190612a56565b60405180910390a461163f828888888888611933565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af9061295b565b60405180910390fd5b60006116c2610e02565b90506116f2818560006116d487611865565b6116dd87611865565b6040518060200160405280600081525061192b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906128db565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611856929190612a56565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d85781602001602082028036833780820191505090505b5090508281600081518110611916577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6119528473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611b12578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199895949392919061276b565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e357506040513d601f19601f820116820180604052508101906119e0919061230d565b60015b611a89576119ef612de3565b806308c379a01415611a4c5750611a0461329e565b80611a0f5750611a4e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061285b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061287b565b60405180910390fd5b505b505050505050565b611b398473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611cf9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7f959493929190612703565b602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bca57506040513d601f19601f82011682018060405250810190611bc7919061230d565b60015b611c7057611bd6612de3565b806308c379a01415611c335750611beb61329e565b80611bf65750611c35565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061285b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061287b565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611d2090612caa565b90600052602060002090601f016020900481019282611d425760008555611d89565b82601f10611d5b57803560ff1916838001178555611d89565b82800160010185558215611d89579182015b82811115611d88578235825591602001919060010190611d6d565b5b509050611d969190611d9a565b5090565b5b80821115611db3576000816000905550600101611d9b565b5090565b6000611dca611dc584612aa4565b612a7f565b90508083825260208201905082856020860282011115611de957600080fd5b60005b85811015611e195781611dff8882611ecd565b845260208401935060208301925050600181019050611dec565b5050509392505050565b6000611e36611e3184612ad0565b612a7f565b90508083825260208201905082856020860282011115611e5557600080fd5b60005b85811015611e855781611e6b8882611fe9565b845260208401935060208301925050600181019050611e58565b5050509392505050565b6000611ea2611e9d84612afc565b612a7f565b905082815260208101848484011115611eba57600080fd5b611ec5848285612c68565b509392505050565b600081359050611edc81613334565b92915050565b600082601f830112611ef357600080fd5b8135611f03848260208601611db7565b91505092915050565b600082601f830112611f1d57600080fd5b8135611f2d848260208601611e23565b91505092915050565b600081359050611f458161334b565b92915050565b600081359050611f5a81613362565b92915050565b600081519050611f6f81613362565b92915050565b600082601f830112611f8657600080fd5b8135611f96848260208601611e8f565b91505092915050565b60008083601f840112611fb157600080fd5b8235905067ffffffffffffffff811115611fca57600080fd5b602083019150836001820283011115611fe257600080fd5b9250929050565b600081359050611ff881613379565b92915050565b60006020828403121561201057600080fd5b600061201e84828501611ecd565b91505092915050565b6000806040838503121561203a57600080fd5b600061204885828601611ecd565b925050602061205985828601611ecd565b9150509250929050565b600080600080600060a0868803121561207b57600080fd5b600061208988828901611ecd565b955050602061209a88828901611ecd565b945050604086013567ffffffffffffffff8111156120b757600080fd5b6120c388828901611f0c565b935050606086013567ffffffffffffffff8111156120e057600080fd5b6120ec88828901611f0c565b925050608086013567ffffffffffffffff81111561210957600080fd5b61211588828901611f75565b9150509295509295909350565b600080600080600060a0868803121561213a57600080fd5b600061214888828901611ecd565b955050602061215988828901611ecd565b945050604061216a88828901611fe9565b935050606061217b88828901611fe9565b925050608086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611f75565b9150509295509295909350565b600080604083850312156121c457600080fd5b60006121d285828601611ecd565b92505060206121e385828601611f36565b9150509250929050565b6000806040838503121561220057600080fd5b600061220e85828601611ecd565b925050602061221f85828601611fe9565b9150509250929050565b60008060006060848603121561223e57600080fd5b600061224c86828701611ecd565b935050602061225d86828701611fe9565b925050604061226e86828701611fe9565b9150509250925092565b6000806040838503121561228b57600080fd5b600083013567ffffffffffffffff8111156122a557600080fd5b6122b185828601611ee2565b925050602083013567ffffffffffffffff8111156122ce57600080fd5b6122da85828601611f0c565b9150509250929050565b6000602082840312156122f657600080fd5b600061230484828501611f4b565b91505092915050565b60006020828403121561231f57600080fd5b600061232d84828501611f60565b91505092915050565b60006020828403121561234857600080fd5b600061235684828501611fe9565b91505092915050565b60008060006040848603121561237457600080fd5b600061238286828701611fe9565b935050602084013567ffffffffffffffff81111561239f57600080fd5b6123ab86828701611f9f565b92509250509250925092565b60006123c383836126ca565b60208301905092915050565b6123d881612bf4565b82525050565b60006123e982612b3d565b6123f38185612b6b565b93506123fe83612b2d565b8060005b8381101561242f57815161241688826123b7565b975061242183612b5e565b925050600181019050612402565b5085935050505092915050565b61244581612c06565b82525050565b600061245682612b48565b6124608185612b7c565b9350612470818560208601612c77565b61247981612e05565b840191505092915050565b600061248f82612b53565b6124998185612b8d565b93506124a9818560208601612c77565b6124b281612e05565b840191505092915050565b60006124ca603483612b8d565b91506124d582612e23565b604082019050919050565b60006124ed602883612b8d565b91506124f882612e72565b604082019050919050565b6000612510602b83612b8d565b915061251b82612ec1565b604082019050919050565b6000612533602683612b8d565b915061253e82612f10565b604082019050919050565b6000612556602483612b8d565b915061256182612f5f565b604082019050919050565b6000612579602983612b8d565b915061258482612fae565b604082019050919050565b600061259c602583612b8d565b91506125a782612ffd565b604082019050919050565b60006125bf603283612b8d565b91506125ca8261304c565b604082019050919050565b60006125e2602383612b8d565b91506125ed8261309b565b604082019050919050565b6000612605602a83612b8d565b9150612610826130ea565b604082019050919050565b6000612628602083612b8d565b915061263382613139565b602082019050919050565b600061264b602983612b8d565b915061265682613162565b604082019050919050565b600061266e602983612b8d565b9150612679826131b1565b604082019050919050565b6000612691602883612b8d565b915061269c82613200565b604082019050919050565b60006126b4602183612b8d565b91506126bf8261324f565b604082019050919050565b6126d381612c5e565b82525050565b6126e281612c5e565b82525050565b60006020820190506126fd60008301846123cf565b92915050565b600060a08201905061271860008301886123cf565b61272560208301876123cf565b818103604083015261273781866123de565b9050818103606083015261274b81856123de565b9050818103608083015261275f818461244b565b90509695505050505050565b600060a08201905061278060008301886123cf565b61278d60208301876123cf565b61279a60408301866126d9565b6127a760608301856126d9565b81810360808301526127b9818461244b565b90509695505050505050565b600060208201905081810360008301526127df81846123de565b905092915050565b6000604082019050818103600083015261280181856123de565b9050818103602083015261281581846123de565b90509392505050565b6000602082019050612833600083018461243c565b92915050565b600060208201905081810360008301526128538184612484565b905092915050565b60006020820190508181036000830152612874816124bd565b9050919050565b60006020820190508181036000830152612894816124e0565b9050919050565b600060208201905081810360008301526128b481612503565b9050919050565b600060208201905081810360008301526128d481612526565b9050919050565b600060208201905081810360008301526128f481612549565b9050919050565b600060208201905081810360008301526129148161256c565b9050919050565b600060208201905081810360008301526129348161258f565b9050919050565b60006020820190508181036000830152612954816125b2565b9050919050565b60006020820190508181036000830152612974816125d5565b9050919050565b60006020820190508181036000830152612994816125f8565b9050919050565b600060208201905081810360008301526129b48161261b565b9050919050565b600060208201905081810360008301526129d48161263e565b9050919050565b600060208201905081810360008301526129f481612661565b9050919050565b60006020820190508181036000830152612a1481612684565b9050919050565b60006020820190508181036000830152612a34816126a7565b9050919050565b6000602082019050612a5060008301846126d9565b92915050565b6000604082019050612a6b60008301856126d9565b612a7860208301846126d9565b9392505050565b6000612a89612a9a565b9050612a958282612cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115612abf57612abe612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aeb57612aea612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b1757612b16612db4565b5b612b2082612e05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ba982612c5e565b9150612bb483612c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612be957612be8612d56565b5b828201905092915050565b6000612bff82612c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c95578082015181840152602081019050612c7a565b83811115612ca4576000848401525b50505050565b60006002820490506001821680612cc257607f821691505b60208210811415612cd657612cd5612d85565b5b50919050565b612ce582612e05565b810181811067ffffffffffffffff82111715612d0457612d03612db4565b5b80604052505050565b6000612d1882612c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4b57612d4a612d56565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e025760046000803e612dff600051612e16565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156132ae57613331565b6132b6612a9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156132de575050613331565b808201805167ffffffffffffffff8111156132fc5750505050613331565b80602083010160043d038501811115613319575050505050613331565b61332882602001850186612cdc565b82955050505050505b90565b61333d81612bf4565b811461334857600080fd5b50565b61335481612c06565b811461335f57600080fd5b50565b61336b81612c12565b811461337657600080fd5b50565b61338281612c5e565b811461338d57600080fd5b5056fea26469706673582212207c954b474ba2938a61031705a0987bcb898a0dffe9cb3f5a8744e3e16585386e64736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100e95760003560e01c8063862440e21161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b8063862440e2146101f05780638da5cb5b1461020c578063a22cb4651461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632eb2c2d61461019a5780634e1273f4146101b6578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b610108600480360381019061010391906121ed565b6102ca565b6040516101159190612a3b565b60405180910390f35b610138600480360381019061013391906122e4565b610393565b604051610145919061281e565b60405180910390f35b61016860048036038101906101639190612336565b610475565b6040516101759190612839565b60405180910390f35b61019860048036038101906101939190612229565b61051a565b005b6101b460048036038101906101af9190612063565b6105b6565b005b6101d060048036038101906101cb9190612278565b610657565b6040516101dd91906127c5565b60405180910390f35b6101ee610808565b005b61020a6004803603810190610205919061235f565b610890565b005b610214610934565b60405161022191906126e8565b60405180910390f35b610244600480360381019061023f91906121b1565b61095e565b005b610260600480360381019061025b9190612027565b610adf565b60405161026d919061281e565b60405180910390f35b610290600480360381019061028b9190612122565b610b73565b005b6102ac60048036038101906102a79190611ffe565b610c14565b005b6102c860048036038101906102c39190612229565b610d0c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061289b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610d98565b5b9050919050565b606060046000838152602001908152602001600020805461049590612caa565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190612caa565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b50505050509050919050565b610522610e02565b73ffffffffffffffffffffffffffffffffffffffff16610540610934565b73ffffffffffffffffffffffffffffffffffffffff1614610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d9061299b565b60405180910390fd5b6105b183838360405180602001604052806000815250610e0a565b505050565b6105be610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106045750610603856105fe610e02565b610adf565b5b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061293b565b60405180910390fd5b6106508585858585610fa0565b5050505050565b6060815183511461069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610694906129db565b60405180910390fd5b6000835167ffffffffffffffff8111156106e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561070e5781602001602082028036833780820191505090505b50905060005b84518110156107fd576107a7858281518110610759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061079a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516102ca565b8282815181106107e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806107f690612d0d565b9050610714565b508091505092915050565b610810610e02565b73ffffffffffffffffffffffffffffffffffffffff1661082e610934565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b9061299b565b60405180910390fd5b61088e6000611300565b565b610898610e02565b73ffffffffffffffffffffffffffffffffffffffff166108b6610934565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109039061299b565b60405180910390fd5b818160046000868152602001908152602001600020919061092e929190611d14565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661097d610e02565b73ffffffffffffffffffffffffffffffffffffffff1614156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129bb565b60405180910390fd5b80600160006109e1610e02565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a8e610e02565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ad3919061281e565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b7b610e02565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc085610bbb610e02565b610adf565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906128fb565b60405180910390fd5b610c0d85858585856113c6565b5050505050565b610c1c610e02565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610934565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061299b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906128bb565b60405180910390fd5b610d0981611300565b50565b610d14610e02565b73ffffffffffffffffffffffffffffffffffffffff16610d32610934565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061299b565b60405180910390fd5b610d93838383611648565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190612a1b565b60405180910390fd5b6000610e84610e02565b9050610ea581600087610e9688611865565b610e9f88611865565b8761192b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f049190612b9e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051610f82929190612a56565b60405180910390a4610f9981600087878787611933565b5050505050565b8151835114610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb906129fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061291b565b60405180910390fd5b600061105e610e02565b905061106e81878787878761192b565b60005b845181101561126b5760008582815181106110b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061297b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112509190612b9e565b925050819055505050508061126490612d0d565b9050611071565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112e29291906127e7565b60405180910390a46112f8818787878787611b1a565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061291b565b60405180910390fd5b6000611440610e02565b905061146081878761145188611865565b61145a88611865565b8761192b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061297b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ac9190612b9e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611629929190612a56565b60405180910390a461163f828888888888611933565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af9061295b565b60405180910390fd5b60006116c2610e02565b90506116f2818560006116d487611865565b6116dd87611865565b6040518060200160405280600081525061192b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906128db565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611856929190612a56565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118d85781602001602082028036833780820191505090505b5090508281600081518110611916577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6119528473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611b12578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199895949392919061276b565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e357506040513d601f19601f820116820180604052508101906119e0919061230d565b60015b611a89576119ef612de3565b806308c379a01415611a4c5750611a0461329e565b80611a0f5750611a4e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061285b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061287b565b60405180910390fd5b505b505050505050565b611b398473ffffffffffffffffffffffffffffffffffffffff16611d01565b15611cf9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7f959493929190612703565b602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bca57506040513d601f19601f82011682018060405250810190611bc7919061230d565b60015b611c7057611bd6612de3565b806308c379a01415611c335750611beb61329e565b80611bf65750611c35565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9190612839565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061285b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061287b565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611d2090612caa565b90600052602060002090601f016020900481019282611d425760008555611d89565b82601f10611d5b57803560ff1916838001178555611d89565b82800160010185558215611d89579182015b82811115611d88578235825591602001919060010190611d6d565b5b509050611d969190611d9a565b5090565b5b80821115611db3576000816000905550600101611d9b565b5090565b6000611dca611dc584612aa4565b612a7f565b90508083825260208201905082856020860282011115611de957600080fd5b60005b85811015611e195781611dff8882611ecd565b845260208401935060208301925050600181019050611dec565b5050509392505050565b6000611e36611e3184612ad0565b612a7f565b90508083825260208201905082856020860282011115611e5557600080fd5b60005b85811015611e855781611e6b8882611fe9565b845260208401935060208301925050600181019050611e58565b5050509392505050565b6000611ea2611e9d84612afc565b612a7f565b905082815260208101848484011115611eba57600080fd5b611ec5848285612c68565b509392505050565b600081359050611edc81613334565b92915050565b600082601f830112611ef357600080fd5b8135611f03848260208601611db7565b91505092915050565b600082601f830112611f1d57600080fd5b8135611f2d848260208601611e23565b91505092915050565b600081359050611f458161334b565b92915050565b600081359050611f5a81613362565b92915050565b600081519050611f6f81613362565b92915050565b600082601f830112611f8657600080fd5b8135611f96848260208601611e8f565b91505092915050565b60008083601f840112611fb157600080fd5b8235905067ffffffffffffffff811115611fca57600080fd5b602083019150836001820283011115611fe257600080fd5b9250929050565b600081359050611ff881613379565b92915050565b60006020828403121561201057600080fd5b600061201e84828501611ecd565b91505092915050565b6000806040838503121561203a57600080fd5b600061204885828601611ecd565b925050602061205985828601611ecd565b9150509250929050565b600080600080600060a0868803121561207b57600080fd5b600061208988828901611ecd565b955050602061209a88828901611ecd565b945050604086013567ffffffffffffffff8111156120b757600080fd5b6120c388828901611f0c565b935050606086013567ffffffffffffffff8111156120e057600080fd5b6120ec88828901611f0c565b925050608086013567ffffffffffffffff81111561210957600080fd5b61211588828901611f75565b9150509295509295909350565b600080600080600060a0868803121561213a57600080fd5b600061214888828901611ecd565b955050602061215988828901611ecd565b945050604061216a88828901611fe9565b935050606061217b88828901611fe9565b925050608086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611f75565b9150509295509295909350565b600080604083850312156121c457600080fd5b60006121d285828601611ecd565b92505060206121e385828601611f36565b9150509250929050565b6000806040838503121561220057600080fd5b600061220e85828601611ecd565b925050602061221f85828601611fe9565b9150509250929050565b60008060006060848603121561223e57600080fd5b600061224c86828701611ecd565b935050602061225d86828701611fe9565b925050604061226e86828701611fe9565b9150509250925092565b6000806040838503121561228b57600080fd5b600083013567ffffffffffffffff8111156122a557600080fd5b6122b185828601611ee2565b925050602083013567ffffffffffffffff8111156122ce57600080fd5b6122da85828601611f0c565b9150509250929050565b6000602082840312156122f657600080fd5b600061230484828501611f4b565b91505092915050565b60006020828403121561231f57600080fd5b600061232d84828501611f60565b91505092915050565b60006020828403121561234857600080fd5b600061235684828501611fe9565b91505092915050565b60008060006040848603121561237457600080fd5b600061238286828701611fe9565b935050602084013567ffffffffffffffff81111561239f57600080fd5b6123ab86828701611f9f565b92509250509250925092565b60006123c383836126ca565b60208301905092915050565b6123d881612bf4565b82525050565b60006123e982612b3d565b6123f38185612b6b565b93506123fe83612b2d565b8060005b8381101561242f57815161241688826123b7565b975061242183612b5e565b925050600181019050612402565b5085935050505092915050565b61244581612c06565b82525050565b600061245682612b48565b6124608185612b7c565b9350612470818560208601612c77565b61247981612e05565b840191505092915050565b600061248f82612b53565b6124998185612b8d565b93506124a9818560208601612c77565b6124b281612e05565b840191505092915050565b60006124ca603483612b8d565b91506124d582612e23565b604082019050919050565b60006124ed602883612b8d565b91506124f882612e72565b604082019050919050565b6000612510602b83612b8d565b915061251b82612ec1565b604082019050919050565b6000612533602683612b8d565b915061253e82612f10565b604082019050919050565b6000612556602483612b8d565b915061256182612f5f565b604082019050919050565b6000612579602983612b8d565b915061258482612fae565b604082019050919050565b600061259c602583612b8d565b91506125a782612ffd565b604082019050919050565b60006125bf603283612b8d565b91506125ca8261304c565b604082019050919050565b60006125e2602383612b8d565b91506125ed8261309b565b604082019050919050565b6000612605602a83612b8d565b9150612610826130ea565b604082019050919050565b6000612628602083612b8d565b915061263382613139565b602082019050919050565b600061264b602983612b8d565b915061265682613162565b604082019050919050565b600061266e602983612b8d565b9150612679826131b1565b604082019050919050565b6000612691602883612b8d565b915061269c82613200565b604082019050919050565b60006126b4602183612b8d565b91506126bf8261324f565b604082019050919050565b6126d381612c5e565b82525050565b6126e281612c5e565b82525050565b60006020820190506126fd60008301846123cf565b92915050565b600060a08201905061271860008301886123cf565b61272560208301876123cf565b818103604083015261273781866123de565b9050818103606083015261274b81856123de565b9050818103608083015261275f818461244b565b90509695505050505050565b600060a08201905061278060008301886123cf565b61278d60208301876123cf565b61279a60408301866126d9565b6127a760608301856126d9565b81810360808301526127b9818461244b565b90509695505050505050565b600060208201905081810360008301526127df81846123de565b905092915050565b6000604082019050818103600083015261280181856123de565b9050818103602083015261281581846123de565b90509392505050565b6000602082019050612833600083018461243c565b92915050565b600060208201905081810360008301526128538184612484565b905092915050565b60006020820190508181036000830152612874816124bd565b9050919050565b60006020820190508181036000830152612894816124e0565b9050919050565b600060208201905081810360008301526128b481612503565b9050919050565b600060208201905081810360008301526128d481612526565b9050919050565b600060208201905081810360008301526128f481612549565b9050919050565b600060208201905081810360008301526129148161256c565b9050919050565b600060208201905081810360008301526129348161258f565b9050919050565b60006020820190508181036000830152612954816125b2565b9050919050565b60006020820190508181036000830152612974816125d5565b9050919050565b60006020820190508181036000830152612994816125f8565b9050919050565b600060208201905081810360008301526129b48161261b565b9050919050565b600060208201905081810360008301526129d48161263e565b9050919050565b600060208201905081810360008301526129f481612661565b9050919050565b60006020820190508181036000830152612a1481612684565b9050919050565b60006020820190508181036000830152612a34816126a7565b9050919050565b6000602082019050612a5060008301846126d9565b92915050565b6000604082019050612a6b60008301856126d9565b612a7860208301846126d9565b9392505050565b6000612a89612a9a565b9050612a958282612cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115612abf57612abe612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aeb57612aea612db4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b1757612b16612db4565b5b612b2082612e05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ba982612c5e565b9150612bb483612c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612be957612be8612d56565b5b828201905092915050565b6000612bff82612c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c95578082015181840152602081019050612c7a565b83811115612ca4576000848401525b50505050565b60006002820490506001821680612cc257607f821691505b60208210811415612cd657612cd5612d85565b5b50919050565b612ce582612e05565b810181811067ffffffffffffffff82111715612d0457612d03612db4565b5b80604052505050565b6000612d1882612c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4b57612d4a612d56565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e025760046000803e612dff600051612e16565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156132ae57613331565b6132b6612a9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156132de575050613331565b808201805167ffffffffffffffff8111156132fc5750505050613331565b80602083010160043d038501811115613319575050505050613331565b61332882602001850186612cdc565b82955050505050505b90565b61333d81612bf4565b811461334857600080fd5b50565b61335481612c06565b811461335f57600080fd5b50565b61336b81612c12565b811461337657600080fd5b50565b61338281612c5e565b811461338d57600080fd5b5056fea26469706673582212207c954b474ba2938a61031705a0987bcb898a0dffe9cb3f5a8744e3e16585386e64736f6c63430008040033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 000000000..c0cffcc0a --- /dev/null +++ b/src/config.ts @@ -0,0 +1,69 @@ +import { AppConfig, ChainFactory, ChainFactoryConfigs } from "."; + +export namespace AppConfigs { + export const MainNet: () => AppConfig = () => { + return { + exchangeRateUri: "https://testing-bridge.xp.network/exchange/", + nftListUri: "https://nft-index.xp.network/index/", + nftListAuthToken: + "eyJhbGciOiJFUzI1NiJ9.eyJhdXRob3JpdHkiOjEsImlhdCI6MTY1Mjc5MTU1NiwiZXhwIjoxNjY4MzQzNTU2fQ.gOzLCBPNGFfjqLzSZsMes0yplAhsRiQYzidVfE-IYtQ-aVqQU6LhzKevLxYLudnm28F5_7CzTKsiuUginuLTtQ", + txSocketUri: "https://transaction-socket.xp.network", + tronScanUri: "https://apilist.tronscan.org/api/", + heartbeatUri: "https://xpheartbeat.herokuapp.com", + wrappedNftPrefix: "https://nft.xp.network/w/", + scVerifyUri: "https://sc-verify.xp.network", + network: "mainnet", + }; + }; + export const TestNet: () => AppConfig = () => { + return { + exchangeRateUri: "https://testing-bridge.xp.network/exchange/", + nftListUri: "https://testnet-notifier.xp.network/testnet-indexer/", + nftListAuthToken: + "eyJhbGciOiJFUzI1NiJ9.eyJhdXRob3JpdHkiOjEsImlhdCI6MTY1MjA4NzAwNiwiZXhwIjoxNjU5ODYzMDA2fQ.ERjXpljkyuklPTJCSXQXZ-Wh09oxQwA4u8HKIbIwO1TSajvLIlNgxseqBVEd5D4lkqXYGwcezkuezuRc3kKkKg", + txSocketUri: "https://testnet-tx-socket.herokuapp.com", + tronScanUri: "https://apilist.tronscan.org/api/", + heartbeatUri: "https://testnet-validator-pinger.herokuapp.com/", + wrappedNftPrefix: "https://testnet-w-nft-api.herokuapp.com/", + scVerifyUri: "https://testnet-sc-verify.herokuapp.com", + network: "testnet", + }; + }; + + export const Staging: () => AppConfig = () => { + return { + exchangeRateUri: "https://testing-bridge.xp.network/exchange/", + nftListUri: "https://tools.xp.network/index", + nftListAuthToken: + "eyJhbGciOiJFUzI1NiJ9.eyJhdXRob3JpdHkiOjEsImlhdCI6MTY1Mjc5MTU1NiwiZXhwIjoxNjY4MzQzNTU2fQ.gOzLCBPNGFfjqLzSZsMes0yplAhsRiQYzidVfE-IYtQ-aVqQU6LhzKevLxYLudnm28F5_7CzTKsiuUginuLTtQ", + txSocketUri: "https://bridge1.xp.network/tx-socket", + tronScanUri: "https://apilist.tronscan.org/api/", + heartbeatUri: "https://xpheartbeat.herokuapp.com", + wrappedNftPrefix: "https://staging-nft.xp.network/w/", + scVerifyUri: "https://bridge1.xp.network/sc-verify", + network: "staging", + }; + }; +} + +export namespace ChainFactories { + export const MainNet = async () => { + return ChainFactory( + AppConfigs.MainNet(), + await ChainFactoryConfigs.MainNet() + ); + }; + + export const TestNet = async () => { + return ChainFactory( + AppConfigs.TestNet(), + await ChainFactoryConfigs.TestNet() + ); + }; + export const Staging = async () => { + return ChainFactory( + AppConfigs.Staging(), + await ChainFactoryConfigs.Staging() + ); + }; +} diff --git a/src/consts.ts b/src/consts.ts new file mode 100644 index 000000000..30f77064f --- /dev/null +++ b/src/consts.ts @@ -0,0 +1,746 @@ +import { + elrondHelperFactory, + ElrondParams, + ElrondHelper, +} from "./helpers/elrond"; +import { tronHelperFactory, TronParams, TronHelper } from "./helpers/tron"; +import { web3HelperFactory, Web3Params, Web3Helper } from "./helpers/web3"; +import { web3HelperFactory as HederaHelperFactory } from "./helpers/hedera/helper"; + +import { + SupportedCurrency, + SupportedCurrencyName, +} from "crypto-exchange-rate/dist/model/domain"; +import { DecimalsByCurrency as Decimals } from "crypto-exchange-rate/dist/model/domain/Decimals"; +import { + AlgorandParams, + AlgorandHelper, + algorandHelper, +} from "./helpers/algorand"; +import { TezosHelper, tezosHelperFactory, TezosParams } from "./helpers/tezos"; +import { ChainNonce, InferChainH, InferChainParam } from "./type-utils"; +import { + SecretHelper, + secretHelperFactory, + SecretParams, +} from "./helpers/secret"; +import { solanaHelper, SolanaHelper, SolanaParams } from "./helpers/solana"; +import { tonHelper, TonHelper, TonParams } from "./helpers/ton"; +import { + dfinityHelper, + DfinityHelper, + DfinityParams, +} from "./helpers/dfinity/dfinity"; +import { NearHelper, NearParams, nearHelperFactory } from "./helpers/near"; +import { aptosHelper, AptosHelper, AptosParams } from "./helpers/aptos"; +import { web3ERC20HelperFactory, Web3ERC20Params } from "./helpers/web3_erc20"; + +// All the supported testnet uri's are here. +export enum TestNetRpcUri { + ELROND = "https://devnet-gateway.elrond.com", + HECO = "https://http-testnet.hecochain.com", + BSC = "https://data-seed-prebsc-2-s3.binance.org:8545/", + ROPSTEN = "https://goerli.infura.io/v3/cec5dc92097a46f0b895ac1e89865467", + AVALANCHE = "https://api.avax-test.network/ext/bc/C/rpc", + POLYGON = "https://matic-mumbai.chainstacklabs.com", + FANTOM = "https://fantom-testnet.public.blastapi.io", + TRON = "https://api.shasta.trongrid.io/", + CELO = "https://alfajores-forno.celo-testnet.org", + HARMONY = "https://api.s0.b.hmny.io", + XDAI = "https://sokol.poa.network", + UNIQUE = "https://rpc-opal.unique.network/", + TEZOS = "https://ghostnet.smartpy.io", + VELAS = "https://explorer.testnet.velas.com/rpc", + IOTEX = "https://babel-api.testnet.iotex.io", + AURORA = "https://testnet.aurora.dev/", + GODWOKEN = "https://godwoken-testnet-v1.ckbapp.dev", + GATECHAIN = "https://meteora-evm.gatenode.cc", + VECHAIN = "https://sync-testnet.veblocks.net", + SECRET = "https://api.pulsar.scrttestnet.com", + SKALE = "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + HEDERA = "https://0.testnet.hedera.com/", + NEAR = "https://rpc.testnet.near.org", + MOONBEAM = "https://rpc.api.moonbase.moonbeam.network", + ABEYCHAIN = "https://testrpc.abeychain.com", + APTOS = "https://fullnode.testnet.aptoslabs.com", + TON = "https://testnet.toncenter.com/api/v2/jsonRPC", + SOLANA = "https://api.devnet.solana.com", + CADUCEUS = "https://galaxy.block.caduceus.foundation", + OKC = "https://exchaintestrpc.okex.org", + ARBITRUM = "https://goerli-rollup.arbitrum.io/rpc", + BITGERT = "https://testnet-rpc.brisescan.com", + // TODO: Algorand + // TODO: Fuse +} + +export enum MainNetRpcUri { + ELROND = "https://gateway.elrond.com", + HECO = "https://http-mainnet-node.huobichain.com", + BSC = "https://bsc-dataseed.binance.org/", + ETHEREUM = "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161", + AVALANCHE = "https://api.avax.network/ext/bc/C/rpc", + POLYGON = "https://polygon-rpc.com", + FANTOM = "https://rpc.fantom.network/", + TRON = "https://api.trongrid.io/", + CELO = "https://forno.celo.org", + HARMONY = "https://rpc.s0.t.hmny.io", + XDAI = "https://gnosischain-rpc.gateway.pokt.network/", + FUSE = "https://rpc.fuse.io/", + VELAS = "https://mainnet.velas.com/rpc", + TEZOS = "https://mainnet.smartpy.io", + IOTEX = "https://babel-api.mainnet.iotex.io", + AURORA = "https://mainnet.aurora.dev", + GODWOKEN = "https://v1.mainnet.godwoken.io/rpc", + GATECHAIN = "https://evm.gatenode.cc", + VECHAIN = "https://sync-mainnet.veblocks.net", + SECRET = "https://secret-4.api.trivium.network:9091/", + SKALE = "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + NEAR = "https://rpc.mainnet.near.org", + MOONBEAM = "https://rpc.api.moonbeam.network", + ABEYCHAIN = "https://rpc.abeychain.com", + TON = "https://toncenter.com/api/v2/jsonRPC", + APTOS = "https://fullnode.mainnet.aptoslabs.com/", + CADUCEUS = "https://mainnet.block.caduceus.foundation/", + OKC = "https://exchainrpc.okex.org/", + ARBITRUM = "https://nova.arbitrum.io/rpc", + BITGERT = "https://dedicated.brisescan.com", + SOLANA = "https://solana-mainnet.g.alchemy.com/v2/4Fm2r6LjJO91nXrKVcZBQXcWgtVe-_gx", + // TODO: Algorand +} + +type ElrondMeta = [ElrondHelper, ElrondParams]; +type Web3Meta = [Web3Helper, Web3Params]; +type TronMeta = [TronHelper, TronParams]; +type AlgoMeta = [AlgorandHelper, AlgorandParams]; +type TezosMeta = [TezosHelper, TezosParams]; +type SecretMeta = [SecretHelper, SecretParams]; +type SolanaMeta = [SolanaHelper, SolanaParams]; +type TonMeta = [TonHelper, TonParams]; +type DfinityMeta = [DfinityHelper, DfinityParams]; +type NearMeta = [NearHelper, NearParams]; +type Web3ERC20Meta = [Web3Helper, Web3ERC20Params]; +type AptosMeta = [AptosHelper, AptosParams]; + +// Static Assert to Ensure all values of Chain are in MetaMap +type MetaMapAssert = { [idx in (typeof Chain)[keyof typeof Chain]]: unknown }; + +export type MetaMap = { + 2: ElrondMeta; + 3: Web3Meta; + 4: Web3Meta; + 5: Web3Meta; + 6: Web3Meta; + 7: Web3Meta; + 8: Web3Meta; + 9: TronMeta; + 0xb: Web3Meta; + 0xc: Web3Meta; + 0xd: Web3Meta; + 0xe: Web3Meta; + 0xf: AlgoMeta; + 0x10: Web3Meta; + 0x11: Web3Meta; + 0x12: TezosMeta; + 0x13: Web3Meta; + 0x14: Web3Meta; + 0x15: Web3Meta; + 0x16: Web3Meta; + 0x17: Web3Meta; + 0x18: SecretMeta; + 0x19: Web3Meta; + 0x1a: SolanaMeta; + 0x1b: TonMeta; + 0x1c: DfinityMeta; + 0x1d: Web3Meta; + 0x1e: Web3ERC20Meta; + 0x1f: NearMeta; + 0x20: Web3Meta; + 0x21: Web3Meta; + 0x22: AptosMeta; + 0x23: Web3Meta; + 0x24: Web3Meta; + 0x25: Web3Meta; + 0x26: Web3Meta; +} & MetaMapAssert; + +export namespace Chain { + export const ELROND = 2; + export const HECO = 3; + export const BSC = 4; + export const ETHEREUM = 5; + export const AVALANCHE = 0x6; + export const POLYGON = 7; + export const FANTOM = 8; + export const TRON = 9; + export const CELO = 0xb; //11 + export const HARMONY = 0xc; //12 + export const ONT = 0xd; //13 + export const XDAI = 0xe; //14 + export const ALGORAND = 0xf; //15 + export const FUSE = 0x10; // 16 + export const UNIQUE = 0x11; // 17 + export const TEZOS = 0x12; // 18 + export const VELAS = 0x13; // 19 + export const IOTEX = 0x14; // 20 + export const AURORA = 0x15; // 21 + export const GODWOKEN = 0x16; // 22 + export const GATECHAIN = 0x17; // 23 + export const SECRET = 0x18; // 24 + export const VECHAIN = 0x19; // 25 + export const SOLANA = 0x1a; // 26 + export const TON = 0x1b; // 27 + export const DFINITY = 0x1c; // 28 + export const HEDERA = 0x1d; // 29 + export const SKALE = 0x1e; // 30 + export const NEAR = 0x1f; // 31 + export const MOONBEAM = 0x20; // 32 + export const ABEYCHAIN = 0x21; // 33 + export const APTOS = 0x22; // 34 + export const CADUCEUS = 0x23; // 35 + export const OKC = 0x24; // 36 + export const ARBITRUM = 0x25; //37 + export const BITGERT = 0x26; //37 +} + +interface ChainData { + name: string; + nonce: number; + decimals: number; + constructor: (p: InferChainParam) => Promise>; + blockExplorerUrl: string; + tnBlockExplorerUrl?: string | ((tx: string) => string); + chainId?: number; + tnChainId?: number; + currency: SupportedCurrency; + currencySymbol: SupportedCurrencyName; + type: string; + blockExplorerUrlAddr?: string; + tnBlockExplorerUrlAddr?: string | ((tx: string) => string); + rejectUnfreeze?: string[]; +} + +type ChainInfo = { + set(k: T, v: ChainData | undefined): void; + get(k: T): ChainData | undefined; +} & Map>; + +export enum ChainType { + EVM = "EVM", + ELROND = "ELROND", + TRON = "TRON", + TEZOS = "TEZOS", + ALGORAND = "ALGORAND", + COSMOS = "COSMOS", + DFINITY = "DFINITY", + SOLANA = "SOLANA", + TON = "TON", + NEAR = "NEAR", + HEDERA = "HEDERA", + APTOS = "APTOS", +} + +export const CHAIN_INFO: ChainInfo = new Map(); +CHAIN_INFO.set(Chain.ELROND, { + name: "Elrond", + nonce: 2, + decimals: Decimals.EGLD, + constructor: elrondHelperFactory, + blockExplorerUrl: "https://explorer.elrond.com/transactions/", + blockExplorerUrlAddr: "https://explorer.elrond.com/address/", + tnBlockExplorerUrl: "https://testnet-explorer.elrond.com/transactions/", + tnBlockExplorerUrlAddr: "https://testnet-explorer.elrond.com/address/", + currency: SupportedCurrency.EGLD, + currencySymbol: SupportedCurrencyName.EGLD, + type: ChainType.ELROND, +}); +CHAIN_INFO.set(Chain.HECO, { + name: "HECO", + nonce: 3, + chainId: 256, + decimals: Decimals.HT, + blockExplorerUrl: "https://testnet.hecoinfo.com/tx", + constructor: web3HelperFactory, + currency: SupportedCurrency.HT, + currencySymbol: SupportedCurrencyName.HT, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.BSC, { + name: "BSC", + nonce: 4, + chainId: 97, + decimals: Decimals.BNB, + blockExplorerUrl: "https://bscscan.com/tx/", + blockExplorerUrlAddr: "https://bscscan.com/address/", + tnBlockExplorerUrl: "https://testnet.bscscan.com/tx/", + tnBlockExplorerUrlAddr: "https://testnet.bscscan.com/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.BNB, + currencySymbol: SupportedCurrencyName.BNB, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.ETHEREUM, { + name: "Ethereum", + nonce: 5, + currency: SupportedCurrency.ETH, + currencySymbol: SupportedCurrencyName.ETH, + chainId: 5, + decimals: Decimals.ETH, + blockExplorerUrl: "https://etherscan.io/tx/", + blockExplorerUrlAddr: "https://etherscan.io/address/", + tnBlockExplorerUrl: "https://goerli.etherscan.io/tx/", + tnBlockExplorerUrlAddr: "https://goerli.etherscan.io/address/", + constructor: web3HelperFactory, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.AVALANCHE, { + name: "Avalanche", + nonce: 6, + chainId: 43113, + decimals: Decimals.AVAX, + blockExplorerUrl: "https://snowtrace.io/tx/", + tnBlockExplorerUrl: "https://testnet.snowtrace.io/tx/", + blockExplorerUrlAddr: "https://snowtrace.io/address/", + tnBlockExplorerUrlAddr: "https://testnet.snowtrace.io/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.AVAX, + currencySymbol: SupportedCurrencyName.AVAX, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.POLYGON, { + name: "Polygon", + nonce: 0x7, + chainId: 80001, + decimals: Decimals.MATIC, + blockExplorerUrl: "https://polygonscan.com/tx/", + tnBlockExplorerUrl: "https://mumbai.polygonscan.com/tx/", + blockExplorerUrlAddr: "https://polygonscan.com/address/", + tnBlockExplorerUrlAddr: "https://mumbai.polygonscan.com/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.MATIC, + currencySymbol: SupportedCurrencyName.MATIC, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.FANTOM, { + name: "Fantom", + nonce: 0x8, + decimals: Decimals.FTM, + chainId: 4002, + blockExplorerUrl: "https://ftmscan.com/tx/", + blockExplorerUrlAddr: "https://ftmscan.com/address/", + tnBlockExplorerUrlAddr: "https://testnet.ftmscan.com/address/", + tnBlockExplorerUrl: "https://testnet.ftmscan.com/tx/", + constructor: web3HelperFactory, + currency: SupportedCurrency.FTM, + currencySymbol: SupportedCurrencyName.FTM, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.TRON, { + name: "Tron", + nonce: 0x9, + decimals: Decimals.TRX, + blockExplorerUrl: "https://shasta.tronscan.org/#/transaction/", + tnBlockExplorerUrl: "https://shasta.tronscan.org/#/transaction/", + blockExplorerUrlAddr: "https://tronscan.io/#/address/", + tnBlockExplorerUrlAddr: "https://shasta.tronscan.org/#/address/", + constructor: tronHelperFactory, + currency: SupportedCurrency.TRX, + currencySymbol: SupportedCurrencyName.TRX, + type: ChainType.TRON, +}); +CHAIN_INFO.set(Chain.CELO, { + name: "Celo", + nonce: 0xb, + decimals: Decimals.CELO, + chainId: 44787, + blockExplorerUrl: "https://alfajores-blockscout.celo-testnet.org/tx", + constructor: web3HelperFactory, + currency: SupportedCurrency.CELO, + currencySymbol: SupportedCurrencyName.CELO, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.HARMONY, { + name: "Harmony", + nonce: 0xc, + decimals: Decimals.ONE, + chainId: 1666700000, + blockExplorerUrl: "https://explorer.harmony.one/tx/", + tnBlockExplorerUrl: "https://explorer.testnet.harmony.one/tx/", + blockExplorerUrlAddr: "https://explorer.harmony.one/address/", + tnBlockExplorerUrlAddr: "https://explorer.testnet.harmony.one/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.ONE, + currencySymbol: SupportedCurrencyName.ONE, + type: ChainType.EVM, + rejectUnfreeze: [ + "0xb90Dc9e354001e6260DE670EDD6aBaDb890C6aC9", + "0xAd6f94bDefB6D5ae941392Da5224ED083AE33adc", + ], +}); +CHAIN_INFO.set(Chain.ONT, { + name: "Ontology", + nonce: 0xd, + decimals: Decimals.ONT, + chainId: 1666700000, + blockExplorerUrl: "https://explorer.pops.one/tx", + constructor: web3HelperFactory, + currency: SupportedCurrency.ONT, + currencySymbol: SupportedCurrencyName.ONT, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.XDAI, { + name: "xDai", + nonce: 0xe, + decimals: Decimals.XDAI, + chainId: 0x64, + blockExplorerUrl: "https://blockscout.com/xdai/mainnet/tx/", + blockExplorerUrlAddr: "https://blockscout.com/xdai/mainnet/address/", + tnBlockExplorerUrl: "https://blockscout.com/xdai/testnet/tx/", + tnBlockExplorerUrlAddr: "https://blockscout.com/xdai/testnet/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.XDAI, + currencySymbol: SupportedCurrencyName.XDAI, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.ALGORAND, { + name: "Algorand", + nonce: 0xf, + decimals: Decimals.ALGO, + chainId: undefined, + blockExplorerUrl: "https://algoexplorer.io/tx/", + tnBlockExplorerUrl: "https://testnet.algoexplorer.io/tx/", + blockExplorerUrlAddr: "https://algoexplorer.io/address/", + tnBlockExplorerUrlAddr: "https://testnet.algoexplorer.io/address/", + currency: SupportedCurrency.ALGO, + currencySymbol: SupportedCurrencyName.ALGO, + constructor: (p) => Promise.resolve(algorandHelper(p)), + type: ChainType.ALGORAND, +}); +CHAIN_INFO.set(Chain.FUSE, { + name: "FUSE", + nonce: 0x10, + decimals: Decimals.FUSE, + chainId: undefined, + blockExplorerUrl: "https://explorer.fuse.io/tx/", + tnBlockExplorerUrl: "https://explorer.fusespark.io/tx/", + blockExplorerUrlAddr: "https://explorer.fuse.io/address/", + tnBlockExplorerUrlAddr: "https://explorer.fusespark.io/address/", + currencySymbol: SupportedCurrencyName.FUSE, + currency: SupportedCurrency.FUSE, + constructor: web3HelperFactory, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.UNIQUE, { + name: "Unique", + nonce: 0x11, + decimals: Decimals.OPL, + chainId: 8888, + blockExplorerUrl: "CANT FIND", + constructor: web3HelperFactory, + currency: SupportedCurrency.OPL, + currencySymbol: SupportedCurrencyName.OPL, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.TEZOS, { + name: "Tezos", + nonce: 0x12, + decimals: Decimals.XTZ, + constructor: tezosHelperFactory, + currency: SupportedCurrency.XTZ, + currencySymbol: SupportedCurrencyName.XTZ, + blockExplorerUrl: "https://tzkt.io/", + tnBlockExplorerUrl: "https://ghostnet.tzkt.io/", + tnBlockExplorerUrlAddr: "https://ghostnet.tzkt.io/", + blockExplorerUrlAddr: "https://tzkt.io/", + type: ChainType.TEZOS, +}); +CHAIN_INFO.set(Chain.VELAS, { + name: "Velas", + blockExplorerUrl: "https://explorer.velas.com/tx/", + tnBlockExplorerUrlAddr: "https://explorer.testnet.velas.com/address/", + blockExplorerUrlAddr: "https://explorer.velas.com/address/", + tnBlockExplorerUrl: "https://explorer.testnet.velas.com/tx/", + nonce: 0x13, + decimals: Decimals.VLX, + constructor: web3HelperFactory, + currency: SupportedCurrency.VLX, + currencySymbol: SupportedCurrencyName.VLX, + chainId: 111, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.AURORA, { + name: "Aurora", + blockExplorerUrl: "https://aurorascan.dev/tx/", + tnBlockExplorerUrl: "hhttps://testnet.aurorascan.dev/tx/", + blockExplorerUrlAddr: "https://aurorascan.dev/address/", + tnBlockExplorerUrlAddr: "https://testnet.aurorascan.dev/address", + nonce: Chain.AURORA, + decimals: Decimals.AURORA, + constructor: web3HelperFactory, + currency: SupportedCurrency.AURORA, + currencySymbol: SupportedCurrencyName.AURORA, + chainId: 1313161554, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.IOTEX, { + name: "IoTeX", + blockExplorerUrl: "https://iotexscan.io/tx/", + blockExplorerUrlAddr: "https://iotexscan.io/address/", + tnBlockExplorerUrl: "https://testnet.iotexscan.io/tx/", + tnBlockExplorerUrlAddr: "https://testnet.iotexscan.io/address/", + nonce: 0x14, + decimals: Decimals.IOTX, + constructor: web3HelperFactory, + currency: SupportedCurrency.IOTX, + currencySymbol: SupportedCurrencyName.IOTX, + chainId: 4689, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.GODWOKEN, { + name: "GodWoken", + blockExplorerUrl: "https://gwscan.com/tx/", + tnBlockExplorerUrl: "https://v1.testnet.gwscan.com/tx/", + blockExplorerUrlAddr: "https://gwscan.com/account/", + tnBlockExplorerUrlAddr: "https://v1.testnet.gwscan.com/account/", + constructor: web3HelperFactory, + nonce: 0x16, + decimals: Decimals.CKB, + currency: SupportedCurrency.CKB, + currencySymbol: SupportedCurrencyName.CKB, + chainId: 868455272153094, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.GATECHAIN, { + name: "GateChain", + blockExplorerUrl: "https://gatescan.org/tx/", + tnBlockExplorerUrl: "https://gatescan.org/testnet/tx/", + blockExplorerUrlAddr: "https://gatescan.org/address/", + tnBlockExplorerUrlAddr: "https://gatescan.org/testnet/address/", + constructor: web3HelperFactory, + nonce: 0x17, + decimals: Decimals.GT, + currency: SupportedCurrency.GT, + currencySymbol: SupportedCurrencyName.GT, + chainId: 85, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.VECHAIN, { + name: "VeChain", + tnBlockExplorerUrl: "https://explore-testnet.vechain.org/transactions/", + blockExplorerUrlAddr: "https://explore.vechain.org/accounts/", + blockExplorerUrl: "https://explore.vechain.org/transactions/", + tnBlockExplorerUrlAddr: "https://explore-testnet.vechain.org/accounts/", + constructor: web3HelperFactory, + nonce: 0x19, + currency: SupportedCurrency.VET, + currencySymbol: SupportedCurrencyName.VET, + decimals: Decimals.VET, + chainId: 39, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.SECRET, { + name: "Secret", + //blockExplorerUrl: "", // TODO + constructor: secretHelperFactory, + nonce: Chain.SECRET, + currency: SupportedCurrency.SCRT, + currencySymbol: SupportedCurrencyName.SCRT, + decimals: Decimals.SCRT, + type: ChainType.COSMOS, + blockExplorerUrl: "https://secretnodes.com/secret/transactions/", + blockExplorerUrlAddr: "https://secretnodes.com/secret/accounts/", + tnBlockExplorerUrl: "https://secretnodes.com/pulsar/transactions/", + tnBlockExplorerUrlAddr: "https://secretnodes.com/pulsar/accounts/", +}); +CHAIN_INFO.set(Chain.SOLANA, { + name: "Solana", + blockExplorerUrl: "https://solscan.io/tx/", + blockExplorerUrlAddr: "https://solscan.io/account/", + tnBlockExplorerUrl: (tx: string) => + `https://solscan.io/tx/${tx}?cluster=devnet`, + tnBlockExplorerUrlAddr: (address: string) => + `https://solscan.io/account/${address}?cluster=devnet`, + constructor: solanaHelper, + nonce: Chain.SOLANA, + currency: SupportedCurrency.SOL, + currencySymbol: SupportedCurrencyName.SOL, + decimals: Decimals.SOL, + type: ChainType.SOLANA, +}); + +CHAIN_INFO.set(Chain.HEDERA, { + blockExplorerUrl: "https://hashscan.io/mainnet/transactionsById/", + tnBlockExplorerUrl: "https://hashscan.io/testnet/transactionsById/", + //@ts-ignore + constructor: + typeof window !== "undefined" ? HederaHelperFactory : web3HelperFactory, + currency: SupportedCurrency.HBAR, + currencySymbol: SupportedCurrencyName.HBAR, + decimals: Decimals.HBAR, + nonce: Chain.HEDERA, + name: "Hedera", + type: ChainType.HEDERA, + blockExplorerUrlAddr: "https://hashscan.io/mainnet/account/", + tnBlockExplorerUrlAddr: "https://hashscan.io/testnet/account/", +}); + +CHAIN_INFO.set(Chain.SKALE, { + name: "Skale", + //needs additional query params + blockExplorerUrl: + "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/tx/", + tnBlockExplorerUrl: + "https://rapping-zuben-elakrab.explorer.staging-v2.skalenodes.com/tx/", + blockExplorerUrlAddr: + "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/address/", + tnBlockExplorerUrlAddr: + "https://rapping-zuben-elakrab.explorer.staging-v2.skalenodes.com/address/", + constructor: web3ERC20HelperFactory, + currency: SupportedCurrency.ETH, + currencySymbol: SupportedCurrencyName.ETH, + decimals: Decimals.ETH, + tnChainId: 0x1482a7b2, + nonce: Chain.SKALE, + type: ChainType.EVM, +}); + +CHAIN_INFO.set(Chain.DFINITY, { + blockExplorerUrl: "", // TODO + constructor: dfinityHelper, + currency: SupportedCurrency.ICP, + currencySymbol: SupportedCurrencyName.ICP, + decimals: Decimals.ICP, + name: "DFINITY", + nonce: Chain.DFINITY, + type: ChainType.DFINITY, +}); + +CHAIN_INFO.set(Chain.NEAR, { + blockExplorerUrl: "https://explorer.mainnet.near.org/transactions/", + tnBlockExplorerUrl: "https://explorer.testnet.near.org/transactions/", + constructor: nearHelperFactory, + currency: SupportedCurrency.NEAR, + currencySymbol: SupportedCurrencyName.NEAR, + decimals: Decimals.NEAR, + name: "NEAR", + nonce: Chain.NEAR, + type: ChainType.NEAR, + blockExplorerUrlAddr: "https://explorer.mainnet.near.org/accounts/", + tnBlockExplorerUrlAddr: "https://explorer.testnet.near.org/accounts/", +}); + +CHAIN_INFO.set(Chain.MOONBEAM, { + constructor: web3HelperFactory, + currency: SupportedCurrency.GLMR, + currencySymbol: SupportedCurrencyName.GLMR, + decimals: Decimals.GLMR, + name: "MoonBeam", + nonce: Chain.MOONBEAM, + chainId: 0x507, + type: ChainType.EVM, + blockExplorerUrlAddr: "https://moonbeam.moonscan.io/address/", + tnBlockExplorerUrlAddr: "https://moonbase.moonscan.io/address/", + blockExplorerUrl: "https://moonscan.io/tx/", + tnBlockExplorerUrl: "https://moonbase.moonscan.io/tx/", +}); + +CHAIN_INFO.set(Chain.ABEYCHAIN, { + tnBlockExplorerUrl: "https://testnet-explorer.abeychain.com/tx/", + tnBlockExplorerUrlAddr: "https://testnet-explorer.abeychain.com/address/", + blockExplorerUrl: "https://scan.abeychain.com/tx/", + blockExplorerUrlAddr: "https://scan.abeychain.com/address/", + constructor: web3HelperFactory, + currency: SupportedCurrency.ABEY, + currencySymbol: SupportedCurrencyName.ABEY, + decimals: Decimals.ABEY, + name: "ABEY", + nonce: Chain.ABEYCHAIN, + chainId: 178, + type: ChainType.EVM, +}); +CHAIN_INFO.set(Chain.APTOS, { + constructor: aptosHelper, + currency: SupportedCurrency.APTOS, + currencySymbol: SupportedCurrencyName.APTOS, + decimals: Decimals.APTOS, + name: "Aptos", + nonce: Chain.APTOS, + type: ChainType.APTOS, + //needs additional query params + blockExplorerUrl: "https://explorer.aptoslabs.com/txn/", + blockExplorerUrlAddr: "https://explorer.aptoslabs.com/account/", + tnBlockExplorerUrl: "https://explorer.aptoslabs.com/txn/", + tnBlockExplorerUrlAddr: "https://explorer.aptoslabs.com/account/", +}); +CHAIN_INFO.set(Chain.TON, { + name: "TON", + constructor: tonHelper, + currency: SupportedCurrency.TON, + currencySymbol: SupportedCurrencyName.TON, + decimals: Decimals.TON, + nonce: Chain.TON, + type: ChainType.TON, + tnBlockExplorerUrl: "https://testnet.tonscan.org/tx/", + blockExplorerUrl: "https://tonscan.org/tx/", + blockExplorerUrlAddr: "https://tonscan.org/address/", + tnBlockExplorerUrlAddr: "https://testnet.tonscan.org/address/", +}); +CHAIN_INFO.set(Chain.CADUCEUS, { + constructor: web3HelperFactory, + currency: SupportedCurrency.CMP, + currencySymbol: SupportedCurrencyName.CMP, + decimals: Decimals.CMP, + name: "Caduceus", + nonce: Chain.CADUCEUS, + blockExplorerUrl: "https://mainnet.scan.caduceus.foundation/tx/", + tnBlockExplorerUrl: "https://galaxy.scan.caduceus.foundation/tx/", + blockExplorerUrlAddr: "https://mainnet.scan.caduceus.foundation/address/", + tnBlockExplorerUrlAddr: "https://galaxy.scan.caduceus.foundation/address/", + type: ChainType.EVM, + chainId: 256256, + tnChainId: 512512, +}); +CHAIN_INFO.set(Chain.OKC, { + blockExplorerUrl: "https://www.oklink.com/okc/", + constructor: web3HelperFactory, + currency: SupportedCurrency.OKT, + currencySymbol: SupportedCurrencyName.OKT, + decimals: Decimals.OKT, + name: "OKC", + nonce: Chain.OKC, + type: ChainType.EVM, + chainId: 66, + blockExplorerUrlAddr: "https://www.oklink.com/en/okc/address/", + tnBlockExplorerUrl: "https://www.oklink.com/okc-test/", + tnBlockExplorerUrlAddr: "https://www.oklink.com/en/okc-test/address/", + tnChainId: 65, +}); +CHAIN_INFO.set(Chain.ARBITRUM, { + blockExplorerUrl: "https://nova.arbiscan.io/tx/", + constructor: web3HelperFactory, + currency: SupportedCurrency.ETH, + currencySymbol: SupportedCurrencyName.ETH, + decimals: Decimals.ETH, + name: "Arbitrum", + nonce: Chain.ARBITRUM, + type: ChainType.EVM, + chainId: 42170, + blockExplorerUrlAddr: "https://nova.arbiscan.io/address/", + tnBlockExplorerUrl: "https://goerli-rollup-explorer.arbitrum.io/tx/", + tnBlockExplorerUrlAddr: "https://goerli-rollup-explorer.arbitrum.io/address/", + tnChainId: 421613, +}); +CHAIN_INFO.set(Chain.BITGERT, { + blockExplorerUrl: "https://brisescan.com/tx/", + constructor: web3HelperFactory, + currency: SupportedCurrency.BRISE, + currencySymbol: SupportedCurrencyName.BRISE, + decimals: Decimals.ETH, + name: "Bitgert", + nonce: Chain.BITGERT, + type: ChainType.EVM, + chainId: 3250, + blockExplorerUrlAddr: "https://brisescan.com/address/", + tnBlockExplorerUrl: "https://testnet-explorer.brisescan.com/tx/", + tnBlockExplorerUrlAddr: "https://testnet-explorer.brisescan.com/address/", + tnChainId: 64668, +}); diff --git a/src/emitter.ts b/src/emitter.ts new file mode 100644 index 000000000..908802616 --- /dev/null +++ b/src/emitter.ts @@ -0,0 +1,2 @@ +export const Emitter = + typeof window !== "undefined" ? new EventTarget() : undefined; diff --git a/src/estimator/index.ts b/src/estimator/index.ts new file mode 100644 index 000000000..942763946 --- /dev/null +++ b/src/estimator/index.ts @@ -0,0 +1,67 @@ +import axios from "axios"; +import { ChainNonce } from "../type-utils"; + +export interface SignatureService { + getSignatureNear( + from: ChainNonce, + toChain: ChainNonce, + nft: string, + tokenContract: string, + tokenId: string, + to: string + ): Promise; + getSignatureDfinity( + fc: ChainNonce, + tc: ChainNonce, + to: string, + num: number + ): Promise; +} + +interface SignatureServiceResponse { + signature: string; + fee: string; +} + +export function signatureService(url: string): SignatureService { + const signer = axios.create({ + baseURL: url, + }); + return { + async getSignatureNear( + fromChain: ChainNonce, + toChain: ChainNonce, + nft: string, + tokenContract: string, + tokenId: string, + to: string + ) { + const result = await signer.post<{ data: SignatureServiceResponse }>( + "/api/get-signature/", + { + fromChain, + toChain, + nft, + to, + tokenId, + tokenContract, + } + ); + console.log("near signature response", result); + return result.data.data; + }, + async getSignatureDfinity(fc, tc, to, num: number) { + const result = await signer.post<{ data: SignatureServiceResponse }>( + "/api/get-signature/", + { + fromChain: fc, + toChain: tc, + to, + num, + nft: {}, + } + ); + return result.data.data; + }, + }; +} diff --git a/src/factory/cons.ts b/src/factory/cons.ts new file mode 100644 index 000000000..92fa3aab2 --- /dev/null +++ b/src/factory/cons.ts @@ -0,0 +1,127 @@ +import { + BatchExchangeRateRepo, + cachedExchangeRateRepo, + ExchangeRateRepo, + networkBatchExchangeRateRepo, + NetworkModel, +} from "crypto-exchange-rate"; + +import { NftInfo, FullChain } from ".."; + +import { CHAIN_INFO, ChainType, Chain } from "../consts"; + +export const _headers = { + "Content-Type": "application/json", + Accept: "*/*", +}; + +export function exchangeRateRepo( + baseUrl: string +): ExchangeRateRepo & BatchExchangeRateRepo { + const baseService = NetworkModel.batchExchangeRateService(baseUrl); + + return cachedExchangeRateRepo( + networkBatchExchangeRateRepo( + baseService, + NetworkModel.exchangeRateDtoMapper() + ) + ); +} + +export function checkBlockedContracts(to: any, contract: string) { + const chain = CHAIN_INFO.get(to); + if (chain?.rejectUnfreeze && chain?.rejectUnfreeze.includes(contract)) { + throw new Error( + `Transfering to ${chain.name} is prohibited by the NFT project team` + ); + } +} + +export function getDefaultContract( + nft: NftInfo, + fromChain: FullChain, + toChain: FullChain +): string | undefined { + const defaultMintError = new Error( + `Transfer has been canceled. The NFT you are trying to send will be minted with a default NFT collection` + ); + + const from = fromChain.getNonce(); + const to = toChain.getNonce(); + + const fromType = CHAIN_INFO.get(from)?.type; + const toType = CHAIN_INFO.get(to)?.type; + + const contract = + //@ts-ignore contractType is checked + "contractType" in nft.native && + //@ts-ignore contractType is checked + nft.native.contractType === "ERC1155" && + toChain.XpNft1155 + ? toChain.XpNft1155 + : toChain.XpNft; + + if ( + typeof window !== "undefined" && + (/(allowDefaultMint=true)/.test(window.location.search) || + /testnet/.test(window.location.pathname)) + ) { + return contract; + } + + if ( + (from === Chain.VECHAIN && toType === ChainType.EVM) || + (to === Chain.VECHAIN && fromType === ChainType.EVM) + ) { + throw defaultMintError; + } + + if ( + (fromType === ChainType.EVM && toType === ChainType.ELROND) || + (fromType === ChainType.ELROND && toType === ChainType.EVM) + ) { + throw defaultMintError; + } + + if ( + (fromType === ChainType.EVM && toType === ChainType.TEZOS) || + (fromType === ChainType.TEZOS && toType === ChainType.EVM) + ) { + throw defaultMintError; + } + + if (from === Chain.SECRET) { + throw defaultMintError; + } + + if (fromType === ChainType.TRON) { + throw defaultMintError; + } + + return contract; +} + +export function prepareTokenId(nft: NftInfo, from: number) { + const tokenId = + //@ts-ignore + nft.native && "tokenId" in nft.native && nft.native.tokenId.toString(); + + if (tokenId) { + const notNumber = isNaN(Number(tokenId)); + + if (notNumber) { + if (from === Chain.ELROND) { + if (nft.native.nonce) return String(nft.native.nonce); + const hex = tokenId.split("-")?.at(2); + return String(hex ? parseInt(hex, 16) : ""); + } + + if (from === Chain.TON || from === Chain.SECRET) { + return "1"; + } + } else { + return tokenId; + } + } + return undefined; +} diff --git a/src/factory/factories.ts b/src/factory/factories.ts new file mode 100644 index 000000000..b26281bbc --- /dev/null +++ b/src/factory/factories.ts @@ -0,0 +1,1019 @@ +import { ChainParams } from "."; +//@ts-ignore +import TronWeb from "tronweb"; +import { Chain, MainNetRpcUri, TestNetRpcUri } from "../consts"; +import { ethers } from "ethers"; +import { TezosToolkit } from "@taquito/taquito"; +import { evNotifier } from "../notifier"; +import { Driver, SimpleNet } from "@vechain/connex-driver"; +import * as thor from "web3-providers-connex"; +import { Framework } from "@vechain/connex-framework"; +import { hethers } from "@hashgraph/hethers"; +import { HttpAgent } from "@dfinity/agent"; +import { Principal } from "@dfinity/principal"; +import TonWeb from "tonweb"; +import { FeeMargins } from "../helpers/chain"; +import { signatureService } from "../estimator"; + +/*const EVM_VALIDATORS = [ + "0xffa74a26bf87a32992bb4be080467bb4a8019e00", + "0x837b2eb764860b442c971f98f505e7c5f419edd7", + "0x9671ce5a02eb53cf0f2cbd220b34e50c39c0bf23", + "0x90e79cc7a06dbd227569920a8c4a625f630d77f4", + "0xdc80905cafeda39cb19a566baeef52472848e82f", + "0x77745cd585798e55938940e3d4dd0fd7cde7bdd6", + "0xc2a29b4e9fa71e9033a52611544403241c56ac5e", +];*/ + +// const _EVM_TESTNET_VALIDATORS = [ +// "0x50aCEC08ce70aa4f2a8ab2F45d8dCd1903ea4E14", +// "0xae87208a5204B6606d3AB177Be5fdf62267Cd499", +// "0x5002258315873AdCbdEF25a8E71C715A4f701dF5", +// ]; + +const middleware_uri = "https://notifier.xp.network"; +const testnet_middleware_uri = + "https://testnet-notifier.xp.network/notify-test/"; + +const signature_service_uri = "https://fee.xp.network"; +const signatureSvc = signatureService(signature_service_uri); + +export namespace ChainFactoryConfigs { + export const TestNet: () => Promise> = async () => { + const feeMargin = { min: 1, max: 5 }; + const notifier = evNotifier(testnet_middleware_uri); + + // VeChain related: + const net = new SimpleNet(TestNetRpcUri.VECHAIN); + const driver = await Driver.connect(net); + const provider = thor.ethers.modifyProvider( + new ethers.providers.Web3Provider( + new thor.ConnexProvider({ connex: new Framework(driver) }) + ) + ); + + return { + elrondParams: { + node_uri: TestNetRpcUri.ELROND, + minter_address: + "erd1qqqqqqqqqqqqqpgqy2nx5z4cpr90de4sga2v2yx62fph3lg8g6vskt0k2f", + esdt_swap_address: + "erd1qqqqqqqqqqqqqpgqc854pa9ruzgs5f8rdzzc02xgq8kqku3ng6vs59vmf8", + esdt_nft: "XPNFT-af3fde", + esdt_swap: "WEGLD-708f9b", + notifier, + nonce: 2, + feeMargin, + }, + tonParams: { + tonweb: new TonWeb( + new TonWeb.HttpProvider(TestNetRpcUri.TON, { + apiKey: + "abe8c1222f19b0891a9a35889d112dc88562093467db8dda39961eeacd50f9b1", + }) + ), + bridgeAddr: "kQBwUu-b4O6qDYq3iDRvsYUnTD6l3WCxLXkv0aH6ywAaPs3c", + burnerAddr: "kQCbH9gGgqJzXuusUVajW_40brrl2fxTYqMkk6HUhJnIgOQA", + xpnftAddr: "EQDji0YH-SNT-qi6o5dQQBLeWL0Xmm46fnqj34EYhOL34WDc", + feeMargin, + notifier, + }, + solanaParams: { + xpnftAddr: "C7bw5dJZwhjWd6TZE3LnE2b1RLqWDiy9XRMA1rajPKQY", + bridgeContractAddr: "FXaXLtmkuoJCJeX6BnLwQJWgT8cPdwuXN8BmmQzVvuRA", + endpoint: TestNetRpcUri.SOLANA, + notifier, + feeMargin, + }, + vechainParams: { + notifier, + feeMargin, + nonce: Chain.VECHAIN, + provider, + minter_addr: "0x5142f6Cc88a9a91b4F6a1972Ce412d57245092A8", + erc721_addr: "0x1cCF127eB11bD9bdbf2b4000dCef04c34C13850B", + erc1155_addr: "0x1109b0CAB4C4e51aBA040a8A6d16273c305941F8", + erc721Minter: "0x1E749e1580889334Bd61254fFab15c1B3ADe1Afd", + erc1155Minter: "0xDA5e020bA795191ff97A5AF97631bACbdcD1354b", + }, + tronParams: { + provider: new TronWeb({ fullHost: TestNetRpcUri.TRON }), + notifier, + minter_addr: "TY46GA3GGdMtu9GMaaSPPSQtqq9CZAv5sK", + erc721_addr: "TDhb2kyurMwoc1eMndKzqNebji1ap1DJC4", + erc1155_addr: "TBeSKv5RSFLAi7SCD7hR64xuvP6N26oEqR", + erc1155Minter: "TBeSKv5RSFLAi7SCD7hR64xuvP6N26oEqR", + erc721Minter: "TMVDt5PP53eQro5hLafibv2xWzSSDSMyjy", + validators: [ + "TJuG3kvmGBDxGyUPBbvKePUjbopLurtqSo", + "TN9bHXEWditocT4Au15mgm7JM56XBnRCvm", + "TRHLhivxVogGhtxKn6sC8UF2Fr3WBdaT8N", + ], + nonce: Chain.TRON, + feeMargin, + }, + caduceusParams: { + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.CADUCEUS), + erc1155_addr: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + erc721_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + erc1155Minter: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + erc721Minter: "0x34933A5958378e7141AA2305Cdb5cDf514896035", + minter_addr: "0x3fe9EfFa80625B8167B2F0d8cF5697F61D77e4a2", + nonce: Chain.CADUCEUS, + }, + avalancheParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.AVALANCHE), + minter_addr: "0xDdF1f6B8Ae8cd26dBE7C4C3ed9ac8E6D8B3a4FdC", + erc721_addr: "0xE1D8Df2e06797F22e7ce25c95A7ddccb926f8A1E", + erc1155Minter: "0xfA9214AEe59a6631A400DC039808457524dE70A2", + erc721Minter: "0x54Db938575DD089702822F191AEbB25C2Af7D1Ef", + erc1155_addr: "0xfA9214AEe59a6631A400DC039808457524dE70A2", + nonce: Chain.AVALANCHE, + feeMargin, + }, + polygonParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.POLYGON), + minter_addr: "0x224f78681099D66ceEdf4E52ee62E5a98CCB4b9e", + erc721_addr: "0xb678b13E41a47e46A4046a4D8315b32E0F34389c", + erc1155Minter: "0x5A768f8dDC67ccCA1431879BcA28E93a6c7722bb", + erc1155_addr: "0xc1D778Ce89154357471bA6c4C6E51f0e590FFe57", + erc721Minter: "0x6516E2D3387A9CF4E5e868E7842D110c95A9f3B4", + nonce: Chain.POLYGON, + feeMargin, + }, + dfinityParams: { + agent: new HttpAgent({ + host: "https://ic0.app", + }), + bridgeContract: Principal.fromText("53bb2-rqaaa-aaaap-aa3vq-cai"), + xpnftId: Principal.fromText("5ogqx-qyaaa-aaaap-aa3wa-cai"), + umt: Principal.fromText("54aho-4iaaa-aaaap-aa3va-cai"), + notifier, + feeMargin, + signatureSvc, + }, + moonbeamParams: { + nonce: Chain.MOONBEAM, + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.MOONBEAM), + erc721Minter: "0x1F71E80E1E785dbDB34c69909C11b71bAd8D9802", + erc1155Minter: "0x10E3EE8526Cc7610393E2f6e25dEee0bD38d057e", + erc1155_addr: "0xd023739a76Df4cC6260A1Ba25e8BEbCe8389D60D", + erc721_addr: "0x42027aF22E36e839e138dc387F1b7428a85553Cc", + minter_addr: "0x0F00f81162ABC95Ee6741a802A1218C67C42e714", + }, + aptosParams: { + rpcUrl: TestNetRpcUri.APTOS, + bridge: + "0x2b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d58", + xpnft: "XPNFT", + notifier, + feeMargin, + nonce: Chain.APTOS, + network: "testnet", + }, + abeyChainParams: { + nonce: Chain.ABEYCHAIN, + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.ABEYCHAIN), + erc721Minter: "0x34933A5958378e7141AA2305Cdb5cDf514896035", + erc1155Minter: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + erc1155_addr: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + erc721_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + minter_addr: "0x3fe9EfFa80625B8167B2F0d8cF5697F61D77e4a2", + }, + fantomParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.FANTOM), + minter_addr: "0x9a287810bA8F0564DaDd9F2Ea9B7B2459497416B", + erc721_addr: "0x3F51015C76D7A64514E9B86D500bBFD44F95bdE9", + erc1155Minter: "string", + erc1155_addr: "0xE657b66d683bF4295325c5E66F6bb0fb6D1F7551", + erc721Minter: "string", + nonce: Chain.FANTOM, + feeMargin, + }, + bscParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.BSC), + minter_addr: "0x3Dd26fFf61D2a79f5fB77100d6daDBF073F334E6", + erc721_addr: "0x783eF7485DCF27a3Cf59F5A0A406eEe3f9b2AaeB", + erc1155Minter: "0x5dA3b7431f4581a7d35aEc2f3429174DC0f2A2E1", + erc721Minter: "0x97CD6fD6cbFfaa24f5c858843955C2601cc7F2b9", + erc1155_addr: "0xb5278A4808e2345A3B9d08bAc8909A121aFaEBB3", + nonce: Chain.BSC, + feeMargin, + }, + celoParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.CELO), + minter_addr: "0x9a287810bA8F0564DaDd9F2Ea9B7B2459497416B", + erc721_addr: "0x3F51015C76D7A64514E9B86D500bBFD44F95bdE9", + erc1155_addr: "", + erc1155Minter: "string", + erc721Minter: "string", + nonce: Chain.CELO, + feeMargin, + }, + harmonyParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.HARMONY), + minter_addr: "0x198Cae9EE853e7b44E99c0b35Bddb451F83485d5", + erc721_addr: "0x1280c5c11bF0aAaaEAeBc998893B42e08B26fD5A", + erc1155Minter: "0xB546c2358A6e4b0B83192cCBB83CaE37FA572fe1", + erc721Minter: "0xb036640d6f7cAfd338103dc60493250561Af2eBc", + erc1155_addr: "0x44FCF0001A2B03260e4Bba44AF93a60C64cE79A2", + nonce: Chain.HARMONY, + feeMargin, + }, + ropstenParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.ROPSTEN), + erc1155_addr: "0x46Df0d0Dd629d61BDFA567dE61912FDeD883A60d", + erc721_addr: "0x33DC209D33AddF60cf90Dd4B10f9a198A1A93f63", + erc1155Minter: "0xE90105827d04522e52AdfA6BF695730E5706C0C2", + erc721Minter: "0x90d38996B210D45bDF2FD54d091C6061dff0dA9F", + minter_addr: "0x04a5f9158829Cae5a0a549954AdEaBD47BbB3d2d", + nonce: Chain.ETHEREUM, + feeMargin, + }, + okcParams: { + erc721Minter: "0xaB9eD7b9734471249255B4d969B32995015116d9", + erc1155Minter: "0x48B218C9f626F079b82f572E3c5B46251c40fc47", + erc1155_addr: "0x57d2Ad1a14C77627D5f82B7A0F244Cfe391e59C5", + erc721_addr: "0xbED4a5b36fae07943589a0b34CC2Ec3a1c208E53", + minter_addr: "0x7cB14C4aB12741B5ab185C6eAFb5Eb7b5282A032", + feeMargin, + nonce: Chain.OKC, + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.OKC), + }, + arbitrumParams: { + erc721Minter: "0x10E3EE8526Cc7610393E2f6e25dEee0bD38d057e", + erc1155Minter: "0xd023739a76Df4cC6260A1Ba25e8BEbCe8389D60D", + erc1155_addr: "0x42027aF22E36e839e138dc387F1b7428a85553Cc", + erc721_addr: "0x0F00f81162ABC95Ee6741a802A1218C67C42e714", + minter_addr: "0xaB9eD7b9734471249255B4d969B32995015116d9", + feeMargin, + nonce: Chain.ARBITRUM, + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.ARBITRUM), + }, + bitgertParams: { + erc721Minter: "0xf185759aDb97977b419e3bc25b14E751c93865e", + erc1155Minter: "0xb0801bffD146c21EF91E86625756aAa7f74aDB3a", + erc1155_addr: "0x7b7Bb6ba1796f2C766cFae6A2C60463766615c69", + erc721_addr: "0x56E5298Ba72125DbF8180b199f74aC2B51d31Deb", + minter_addr: "0x39d4F26213245D33f506ECA1ce68D08dCF4d8d14", + feeMargin, + nonce: Chain.BITGERT, + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.BITGERT), + }, + xDaiParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.XDAI), + minter_addr: "0x90d38996B210D45bDF2FD54d091C6061dff0dA9F", + erc721_addr: "0x0e02b55e1D0ec9023A04f1278F39685B53739010", + erc1155Minter: "0x0AA29baB4F811A9f3dcf6a0F9cAEa9bE18ECED78", + erc721Minter: "0x7cB14C4aB12741B5ab185C6eAFb5Eb7b5282A032", + erc1155_addr: "0x1C6d7aa611B30C9C1e5f52068E145b77b0e661b2", + nonce: Chain.XDAI, + feeMargin, + }, + algorandParams: { + algodApiKey: + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + indexerUri: "https://algoindexer.testnet.algoexplorerapi.io", + algodUri: "https://node.testnet.algoexplorerapi.io", + nonce: Chain.ALGORAND, + sendNftAppId: 83148194, + algodPort: 443, + notifier, + feeMargin, + }, + auroraParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.AURORA), + erc721_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + minter_addr: "0x3fe9EfFa80625B8167B2F0d8cF5697F61D77e4a2", + erc1155Minter: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + erc1155_addr: "", + erc721Minter: "0x34933A5958378e7141AA2305Cdb5cDf514896035", + nonce: Chain.AURORA, + feeMargin, + }, + uniqueParams: { + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.UNIQUE), + nonce: Chain.UNIQUE, + erc721_addr: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + erc1155_addr: "", + minter_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + erc1155Minter: "string", + erc721Minter: "string", + notifier, + feeMargin, + }, + tezosParams: { + bridgeAddress: "KT1NJG7j4Z5LbU3obL5TUaJPGNT45ukRTQrH", + notifier, + Tezos: new TezosToolkit(TestNetRpcUri.TEZOS), + xpnftAddress: "KT1GRqXuUpGJGDLCRsgQ9nDvVu7tap6LPxTC", + validators: [ + "tz1iKCCYmhayfpp1HvVA8Fmp4PkY5Z7XnDdX", + "tz1g4CJW1mzVLvN8ycHFg9JScpuzYrJhZcnD", + "tz1exbY3JKPRpo2KLegK8iqoVNRLn1zFrnZi", + ], + feeMargin, + }, + velasParams: { + notifier, + erc721_addr: "0xE657b66d683bF4295325c5E66F6bb0fb6D1F7551", + erc1155_addr: "0x5D822bA2a0994434392A0f947C83310328CFB0DE", + minter_addr: "0x5051679FEDf0D7F01Dc23e72674d0ED58de9be6a", + erc1155Minter: "0x941972fa041F507eBb8CfD5d11C05Eb1a51f2E95", + erc721Minter: "0x5df32A2F15D021DeF5086cF94fbCaC4594208A26", + nonce: Chain.VELAS, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.VELAS), + feeMargin, + }, + iotexParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.IOTEX), + minter_addr: "0xE657b66d683bF4295325c5E66F6bb0fb6D1F7551", + erc721_addr: "0x5D822bA2a0994434392A0f947C83310328CFB0DE", + erc1155_addr: "0x46Df0d0Dd629d61BDFA567dE61912FDeD883A60d", + erc1155Minter: "0x5df32A2F15D021DeF5086cF94fbCaC4594208A26", + erc721Minter: "0xC3dB3dBcf007961541BE1ddF15cD4ECc0Fc758d5", + nonce: Chain.IOTEX, + feeMargin, + }, + hederaParams: { + notifier, + provider: hethers.getDefaultProvider("testnet") as any, + feeMargin, + nonce: Chain.HEDERA, + api: "https://testnet.mirrornode.hedera.com/", + htcToken: "0x00000000000000000000000000000000003b22a5", + erc721_addr: "0x00000000000000000000000000000000003b2294", + erc1155_addr: "0x00000000000000000000000000000000003b2294", + minter_addr: "0x00000000000000000000000000000000003b229e", + erc721Minter: "0x000000000000000000000000000000000037008d", + erc1155Minter: "0x0000000000000000000000000000000000370090", + }, + skaleParams: { + nonce: Chain.SKALE, + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.SKALE), + feeMargin, + erc1155_addr: "0x57d2Ad1a14C77627D5f82B7A0F244Cfe391e59C5", + erc1155Minter: "0x48B218C9f626F079b82f572E3c5B46251c40fc47", + erc721Minter: "0xaB9eD7b9734471249255B4d969B32995015116d9", + erc721_addr: "0xbED4a5b36fae07943589a0b34CC2Ec3a1c208E53", + minter_addr: "0x7cB14C4aB12741B5ab185C6eAFb5Eb7b5282A032", + paymentTokenAddress: "0x0F00f81162ABC95Ee6741a802A1218C67C42e714", + }, + godwokenParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.GODWOKEN), + minter_addr: "0x3fe9EfFa80625B8167B2F0d8cF5697F61D77e4a2", + erc721_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + erc1155_addr: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + erc721Minter: "0x34933A5958378e7141AA2305Cdb5cDf514896035", + erc1155Minter: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + nonce: Chain.GODWOKEN, + feeMargin, + }, + gateChainParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(TestNetRpcUri.GATECHAIN), + minter_addr: "0x2B24de7BFf5d2ab01b1C53682Ee5987c9BCf1BAc", + erc721_addr: "0x3fe9EfFa80625B8167B2F0d8cF5697F61D77e4a2", + erc1155_addr: "0x8CEe805FE5FA49e81266fcbC27F37D85062c1707", + erc721Minter: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + erc1155Minter: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + nonce: Chain.GATECHAIN, + feeMargin, + }, + secretParams: { + notifier, + rpcUrl: TestNetRpcUri.SECRET, + bridge: { + contractAddress: "secret1ecsxtsrct6h647lpztnnzc9e47ezh0uu673c8h", + codeHash: + "29a127369d1f4326fb684435fde702fa9619c812dfb5b3a1929529bab0e308e0", + }, + xpnft: { + contractAddress: "secret1x4afa2shvq4uwwtl0ld8qnjfm3jkmyvap3yn9g", + codeHash: + "090ab9b7968745369f8888302a16650164e2ffc2f44c393a7382f74e122a9a8e", + }, + umt: { + contractAddress: "secret146snljq0kjsva7qrx4am54nv3fhfaet7srx4n2", + codeHash: + "af076a49141264ec048270318f1358c9be193893c3f829425cab53ee5eb05e5c", + }, + chainId: "pulsar-2", + feeMargin, + }, + + nearParams: { + networkId: "testnet", + nonce: Chain.NEAR, + rpcUrl: TestNetRpcUri.NEAR, + bridge: "xp_new_bridge.testnet", + xpnft: "xp_new_nft.testnet", + walletUrl: "https://wallet.testnet.near.org", + helperUrl: "https://helper.testnet.near.org", + feeMargin, + notifier, + signatureSvc, + }, + }; + }; + + export const Staging: () => Promise> = async () => { + const feeMargin: FeeMargins = { min: 1, max: 5 }; + const notifier = evNotifier("https://bridge1.xp.network/notifier"); + + return { + tonParams: { + bridgeAddr: "kQBGFgZOXaF7LPRxWrjd9l6Iws6KGhWiMs3BKzAZGyeMq2AS", + burnerAddr: "kQAee5m2tk_-ipbrq40Geey7_yZmjZwAYZFjuKy9CbWvVykL", + notifier, + tonweb: new TonWeb( + new TonWeb.HttpProvider("https://toncenter.com/api/v2/jsonRPC", { + apiKey: + "05645d6b549f33bf80cee8822bd63df720c6781bd00020646deb7b2b2cd53b73", + }) + ), + xpnftAddr: "EQCgk1I2zujGrXaNXnWZEtFD93tSKNjvRfqKV0xp7EswHgw9", + feeMargin, + }, + nearParams: { + networkId: "mainnet", + nonce: Chain.NEAR, + rpcUrl: MainNetRpcUri.NEAR, + bridge: + "e138f27300334f546bbd792e65dc8753af29d534c5248a3f55e875693bddcf19", + xpnft: "damphir7.near", + feeMargin, + notifier, + walletUrl: "https://wallet.mainnet.near.org", + helperUrl: "https://helper.mainnet.near.org", + signatureSvc, + }, + solanaParams: { + xpnftAddr: "", + bridgeContractAddr: "kVvEBTB1h9GWEC7GcuDNTEmk6uxbCM11GvSmwvuCAwx", + endpoint: MainNetRpcUri.SOLANA, + notifier, + feeMargin, + }, + caduceusParams: { + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.CADUCEUS), + erc1155_addr: "0x820c0b504fe85b43E3c43D2EA24cb764ad78d52e", + erc721_addr: "0x086815f8154e3cdD89cD3aEc78377e3197a572d0", + erc1155Minter: "0xe3266d5181FffE43A205ce5bE9437B9f717Bad84", + erc721Minter: "0x8411EeadD374bDE549F61a166FFBeFca592bC60a", + minter_addr: "0x28c43F505d210D6f8f78C58b450b76890dc76F21", + nonce: Chain.CADUCEUS, + }, + avalancheParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.AVALANCHE), + erc721Minter: "0xb3cE27eDadFE006f9f47C5ed5b62E63DFd9Cf3bD", + erc1155Minter: "0x23d399368EF31ca950E4Fd2063F2e4A5ACC0f9c2", + erc721_addr: "0xcEFC9182e9AB181b3FED4e89CdA55E0B9010aFe1", + minter_addr: "0x52e7D07DE51F8163E0f29061EaAa7D3FEaf6b47E", + erc1155_addr: "0x77037e4f8aCb09f9bdedB9311bB6d9e74ed44371", + nonce: Chain.AVALANCHE, + feeMargin, + }, + algorandParams: { + algodApiKey: "kZWDAxYR7Y6S6RoyfGIi28SATZ5DfTIs5pF0UMW4", + algodUri: "https://mainnet-algorand.api.purestake.io/ps2", + indexerUri: "https://mainnet-algorand.api.purestake.io/idx2", + nonce: Chain.ALGORAND, + sendNftAppId: 942656248, + algodPort: 443, + notifier, + feeMargin, + }, + fantomParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.FANTOM), + erc721Minter: "", + erc1155Minter: "", + erc1155_addr: "0xAE3bF9a0abd3D753aBB579c6E8BFD5D5F5e89c70", + erc721_addr: "0x3CF207B7E4633400B8A29B3c758296d290a51345", + minter_addr: "0xD0060e9d327fCeF5A0B0919e3624eABa56565348", + nonce: Chain.FANTOM, + feeMargin, + }, + elrondParams: { + node_uri: MainNetRpcUri.ELROND, + minter_address: + "erd1qqqqqqqqqqqqqpgqacac9ux4uz0pjg8ck2sf0ugxre0feczzvcas2tsatn", + esdt_swap_address: + "erd1qqqqqqqqqqqqqpgqjlnfddgj2dl4kz3x4n55yhfv7v06mxhzvcas2ec5ps", + esdt_nft: "XPNFT-976581", + esdt_swap: "WEGLD-8c393e", + notifier, + nonce: Chain.ELROND, + feeMargin, + }, + harmonyParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.HARMONY), + minter_addr: "0x77037e4f8aCb09f9bdedB9311bB6d9e74ed44371", + erc721_addr: "0x23d399368EF31ca950E4Fd2063F2e4A5ACC0f9c2", + erc1155_addr: "0xb3cE27eDadFE006f9f47C5ed5b62E63DFd9Cf3bD", + erc1155Minter: "0x28c43F505d210D6f8f78C58b450b76890dc76F21", + erc721Minter: "0x086815f8154e3cdD89cD3aEc78377e3197a572d0", + nonce: Chain.HARMONY, + feeMargin, + }, + velasParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.VELAS), + erc721Minter: "0x4d739e4953CE42f71604cbE142FD293841F9ed1c", + erc1155Minter: "0xeEc7955F2F7AA4E36B582D8f022c9417ecB75a44", + erc721_addr: "0x19678D8f9601AD0F099D401A3f82e4d6745B0e56", + erc1155_addr: "0x4a153028F0b40C41432127E050015963D130b01A", + minter_addr: "0xe535A8De7C42a8bc1633f16965fbc259a3Ef58B6", + nonce: Chain.VELAS, + feeMargin, + }, + bscParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.BSC), + erc721Minter: "0x83feaeA88b1377970E7cD11492d084B63e09C87E", + erc1155_addr: "0x1B20ceec70e9635f5B56928de16A9dBc8EB8e3b6", + erc1155Minter: "0x5Af6A4C6E261315C5B7811bEb9c620CfF4722793", + erc721_addr: "0x9796B2F03e3afF786048cd67a1D33282476AB1d4", + minter_addr: "0x7Eac6825A851d79ae24301eA497AD8db2a0F4976", + nonce: Chain.BSC, + feeMargin, + }, + secretParams: { + bridge: { + contractAddress: "secret1t0g8tvc0tyvpwdsdc5zepa9j2ptr3vfte26qhu", + codeHash: + "684afe616d92b29c097c5f00365d07c005e99c90ff1227507a0284b601a2cc5e", + }, + xpnft: { + contractAddress: "secret1ggvqzks96k7hawhdx3harrtnffhttrrq2qxmdg", + codeHash: + "b7f44f7d2f72bfec52b027ee6b3ef802246735b50b2bfe747851876f818d7f45", + }, + notifier, + rpcUrl: MainNetRpcUri.SECRET, + umt: { + contractAddress: "", + codeHash: "", + }, + chainId: "24", + feeMargin, + }, + abeyChainParams: { + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.ABEYCHAIN), + erc1155_addr: "0x8776073043eef8929F4a9cBa8Aacc6B59A21BA52", + erc1155Minter: "0x5Ed657a379e06CBAc1Ba1a9cF6D28e71c66B0c83", + erc721_addr: "0x3C8C51809Ee58E9D3BA37e37112843e41DcBD7B7", + erc721Minter: "0xD580913Ef2c8CA4Ca90D4bE6851ACa004cf586D8", + minter_addr: "0x14db0f56042Fa87F3b3921E871f87248f4C56A71", + nonce: Chain.ABEYCHAIN, + }, + moonbeamParams: { + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.MOONBEAM), + erc1155_addr: "0x554560C6800f123B4A713F80A5AC9F21486F5De8", + erc721_addr: "0x6f64e03fcc34b774b3b82825a91aABA336Fbf931", + erc1155Minter: "0xA97FD39705583296221f39cb245fb573B28722A1", + erc721Minter: "0x0e5C62beAD14795F3eA9969B139F5433DF85319e", + minter_addr: "0xce50496C6616F4688d5775966E302A49e3876Dff", + nonce: Chain.MOONBEAM, + }, + polygonParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.POLYGON), + erc721Minter: "0x32732607F67f9FC2007AF84e54B2ea9042327ed3", + erc1155Minter: "0x62E26979F555Ec475981D8D1A7e269f747643f22", + erc721_addr: "0x54024A9351B7aD68921914942f776489E71c467e", + erc1155_addr: "0x8D3e050555356a2eD4ad8cfFb189994035F5803C", + minter_addr: "0xF712f9De44425d8845A1d597a247Fe88F4A23b6f", + nonce: Chain.POLYGON, + feeMargin, + }, + skaleParams: { + notifier, + feeMargin, + nonce: Chain.SKALE, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.SKALE), + erc721Minter: "0x0e02b55e1D0ec9023A04f1278F39685B53739010", + erc1155Minter: "0x90d38996B210D45bDF2FD54d091C6061dff0dA9F", + erc1155_addr: "0xE90105827d04522e52AdfA6BF695730E5706C0C2", + erc721_addr: "0x46Df0d0Dd629d61BDFA567dE61912FDeD883A60d", + minter_addr: "0x33DC209D33AddF60cf90Dd4B10f9a198A1A93f63", + paymentTokenAddress: "0x59ab97Ee239e02112652587F9Ef86CB6F762983b", // Euphoria ETH (ETH) Token + }, + aptosParams: { + rpcUrl: MainNetRpcUri.APTOS, + bridge: + "0x813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec37", + xpnft: "XPNFT", + notifier, + feeMargin, + nonce: Chain.APTOS, + network: "staging", + }, + }; + }; + + export const MainNet: () => Promise> = async () => { + const feeMargin = { min: 1, max: 5 }; + const notifier = evNotifier(middleware_uri); + + // VeChain related: + const net = new SimpleNet(MainNetRpcUri.VECHAIN); + const driver = await Driver.connect(net); + const provider = thor.ethers.modifyProvider( + new ethers.providers.Web3Provider( + new thor.ConnexProvider({ connex: new Framework(driver) }) + ) + ); + + return { + tonParams: { + bridgeAddr: "kQAV8Z_aSl_e3PUMwXAb-mdE9l5Bsf83vn40NKc2LtsiFlGm", + burnerAddr: "kQDsF-yKhKqg4ygCynLfYRaw_QJeSoK2BeRpamO-nXeuuSiT", + notifier, + tonweb: new TonWeb( + new TonWeb.HttpProvider("https://toncenter.com/api/v2/jsonRPC", { + apiKey: + "05645d6b549f33bf80cee8822bd63df720c6781bd00020646deb7b2b2cd53b73", + }) + ), + xpnftAddr: "EQABqbZubs5e3QQF3lxVZMvdaxlaIdNQWq8W1rn8rvVvWHys", + feeMargin, + }, + elrondParams: { + node_uri: MainNetRpcUri.ELROND, + minter_address: + "erd1qqqqqqqqqqqqqpgq3y98dyjdp72lwzvd35yt4f9ua2a3n70v0drsfycvu8", + esdt_swap_address: + "erd1qqqqqqqqqqqqqpgq5vuvac70kn36yk4rvf9scr6p8tlu23220drsfgszfy", + esdt_nft: "XPNFT-cb7482", + esdt_swap: "WEGLD-5f1f8d", + notifier, + nonce: Chain.ELROND, + feeMargin, + }, + caduceusParams: { + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.CADUCEUS), + erc1155_addr: "0xF8AE68714fF6704883281603a22b56f47eB23511", + erc721_addr: "0x97799bEDB7AD04d61899F0255BA12EAF641d666D", + erc1155Minter: "0xFbA4cB4B617328cfE7a92907e4fb34bf1d798eBA", + erc721Minter: "0x6b3b43029dD4695f8780d7f16E0313dA02d9507B", + minter_addr: "0x98e9510261F34438e340c03cD35b492f87f628A8", + nonce: Chain.CADUCEUS, + }, + okcParams: { + erc721Minter: "0x8411EeadD374bDE549F61a166FFBeFca592bC60a", + erc1155Minter: "0xe3266d5181FffE43A205ce5bE9437B9f717Bad84", + erc1155_addr: "0x820c0b504fe85b43E3c43D2EA24cb764ad78d52e", + erc721_addr: "0x086815f8154e3cdD89cD3aEc78377e3197a572d0", + minter_addr: "0x28c43F505d210D6f8f78C58b450b76890dc76F21", + feeMargin, + nonce: Chain.OKC, + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.OKC), + }, + arbitrumParams: { + erc721Minter: "0x536dDc3Be14A980d3cd15635b3D05985C297FD07", + erc1155Minter: "0x4F4F48f70892475b0D4863f61F47157Dd1Db9F1a", + erc1155_addr: "0xBd2005050a99142d7B77B415e7b603633f3B3746", + erc721_addr: "0x445712E8dcf35E42FFAbb79b900aADcE2284fB65", + minter_addr: "0x72d270bb71A90B82260b12c31D427C3F33AC0692", + feeMargin, + nonce: Chain.ARBITRUM, + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.ARBITRUM), + }, + bitgertParams: { + erc721Minter: "string", + erc1155Minter: "string", + erc1155_addr: "string", + erc721_addr: "string", + minter_addr: "string", + feeMargin, + nonce: Chain.BITGERT, + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.BITGERT), + }, + dfinityParams: { + agent: new HttpAgent({ + host: "https://ic0.app", + }), + bridgeContract: Principal.fromText("e3io4-qaaaa-aaaak-qasua-cai"), + xpnftId: Principal.fromText("e4jii-5yaaa-aaaak-qasuq-cai"), + umt: Principal.fromText("evkdu-lqaaa-aaaak-qasva-cai"), + notifier, + feeMargin, + signatureSvc, + }, + vechainParams: { + notifier, + feeMargin, + nonce: Chain.VECHAIN, + provider, + minter_addr: "0xE860cef926E5e76E0E88fdc762417a582F849C27", + erc721_addr: "0xf0E778BD5C4c2F219A2A5699e3AfD2D82D50E271", + erc1155_addr: "", + erc721Minter: "0x6e2B43FeF2E750e1562AC572e60B6C484a027424", + erc1155Minter: "0x4E3a506800b894f3d7B46475Ab693DD5a567bB5C", + }, + tronParams: { + provider: new TronWeb({ fullHost: MainNetRpcUri.TRON }), + notifier, + minter_addr: "TAncANF5aYbvgXDatmwTdvTa5N9PTrq95k", + erc721_addr: "TVdp7szDHg3opRyuciQaJi93LLk7y83hrC", + erc1155_addr: "", + erc1155Minter: "TYoj1JVpJt1TAWBFj3GkaKLC2vrcFnjZ1G", + erc721Minter: "TPSQTbFWaxiDZbGD7MoqR6N2aWDSWBUNfA", + validators: [ + "TJuG3kvmGBDxGyUPBbvKePUjbopLurtqSo", + "TN9bHXEWditocT4Au15mgm7JM56XBnRCvm", + "TRHLhivxVogGhtxKn6sC8UF2Fr3WBdaT8N", + "TJuG3kvmGBDxGyUPBbvKePUjbopLurtqSo", + "TN9bHXEWditocT4Au15mgm7JM56XBnRCvm", + "TRHLhivxVogGhtxKn6sC8UF2Fr3WBdaT8N", + "TJuG3kvmGBDxGyUPBbvKePUjbopLurtqSo", + ], + nonce: Chain.TRON, + feeMargin, + }, + avalancheParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.AVALANCHE), + erc721Minter: "0x9b2bACF4E69c81EF4EF42da84872aAC39ce7EC62", + erc1155Minter: "0x73E8deFC951D228828da35Ff8152f25c1e5226fa", + erc721_addr: "0x7bf2924985CAA6192D721B2B9e1109919aC6ff58", + minter_addr: "0xC254a8D4eF5f825FD31561bDc69551ed2b8db134", + erc1155_addr: "0x73E8deFC951D228828da35Ff8152f25c1e5226fa", + nonce: Chain.AVALANCHE, + feeMargin, + }, + polygonParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.POLYGON), + erc721Minter: "0x7E8493F59274651Cc0919feCf12E6A77153cdA72", + erc1155Minter: "0x73E8deFC951D228828da35Ff8152f25c1e5226fa", + erc721_addr: "0xC254a8D4eF5f825FD31561bDc69551ed2b8db134", + erc1155_addr: "0x7bf2924985CAA6192D721B2B9e1109919aC6ff58", + minter_addr: "0x14CAB7829B03D075c4ae1aCF4f9156235ce99405", + nonce: Chain.POLYGON, + feeMargin, + }, + fantomParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.FANTOM), + erc721Minter: "0xC81D46c6F2D59182c5A64FD5C372266c98985AdF", + erc1155Minter: "0x146a99Ff19ece88EC87f5be03085cA6CD3163E15", + erc1155_addr: "0x4bA4ADdc803B04b71412439712cB1911103380D6", + erc721_addr: "0x75f93b47719Ab5270d27cF28a74eeA247d5DfeFF", + minter_addr: "0x97dd1B3AE755539F56Db8b29258d7C925b20b84B", + nonce: Chain.FANTOM, + feeMargin, + }, + bscParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.BSC), + erc721Minter: "0xa66dA346C08dD77bfB7EE5E68C45010B6F2538ff", + erc1155_addr: "0x3F888c0Ee72943a3Fb1c169684A9d1e8DEB9f537", + erc1155Minter: "0xF5e0c79CB0B7e7CF6Ad2F9779B01fe74F958964a", + erc721_addr: "0x0cC5F00e673B0bcd1F780602CeC6553aec1A57F0", + minter_addr: "0x0B7ED039DFF2b91Eb4746830EaDAE6A0436fC4CB", + nonce: Chain.BSC, + feeMargin, + }, + celoParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.CELO), + minter_addr: "string", + erc721_addr: "string", + erc1155Minter: "string", + erc721Minter: "string", + erc1155_addr: "", + nonce: Chain.CELO, + feeMargin, + }, + harmonyParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.HARMONY), + minter_addr: "0x1358844f14feEf4D99Bc218C9577d1c7e0Cb2E89", + erc721_addr: "0xDcAA2b071c1851D8Da43f85a34a5A57d4Fa93A1A", + erc1155_addr: "0xFEeD85607C1fbc2f30EAc13281480ED6265e121E", + erc1155Minter: "0xF547002799955812378137FA30C21039E69deF05", + erc721Minter: "0x57d2Ad1a14C77627D5f82B7A0F244Cfe391e59C5", + nonce: Chain.HARMONY, + feeMargin, + }, + ropstenParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.ETHEREUM), + minter_addr: "0x1cC24128C04093d832D4b50609e182ed183E1688", + erc721_addr: "0x32E8854DC2a5Fd7049DCF10ef2cb5f01300c7B47", + erc1155_addr: "0x041AE550CB0e76a3d048cc2a4017BbCB74756b43", + erc1155Minter: "0xca8E2a118d7674080d71762a783b0729AadadD42", + erc721Minter: "0xF547002799955812378137FA30C21039E69deF05", + nonce: Chain.ETHEREUM, + feeMargin, + }, + xDaiParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.XDAI), + erc721Minter: "0x82A7d50A0030935808dAF6e5f0f06645866fb7Bb", + erc1155Minter: "0xFEeD85607C1fbc2f30EAc13281480ED6265e121E", + erc721_addr: "0x1358844f14feEf4D99Bc218C9577d1c7e0Cb2E89", + erc1155_addr: "0xDcAA2b071c1851D8Da43f85a34a5A57d4Fa93A1A", + minter_addr: "0x81e1Fdad0658b69914801aBaDA7Aa0Abb31653E5", + nonce: Chain.XDAI, + feeMargin, + }, + algorandParams: { + algodApiKey: + "e5b7d342b8a742be5e213540669b611bfd67465b754e7353eca8fd19b1efcffd", + algodUri: "https://algorand-node.xp.network/", + indexerUri: "https://algoindexer.algoexplorerapi.io", + nonce: Chain.ALGORAND, + sendNftAppId: 769053604, + algodPort: 443, + notifier, + feeMargin, + }, + fuseParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.FUSE), + erc721Minter: "0xC81D46c6F2D59182c5A64FD5C372266c98985AdF", + erc1155Minter: "0x146a99Ff19ece88EC87f5be03085cA6CD3163E15", + erc721_addr: "0x93239b1CF8CAd847f387735876EdBa7D75ae4f7A", + erc1155_addr: "0x2496b44516c8639dA00E8D12ccE64862e3760190", + minter_addr: "0xa66dA346C08dD77bfB7EE5E68C45010B6F2538ff", + nonce: Chain.FUSE, + feeMargin, + }, + tezosParams: { + bridgeAddress: "KT1WKtpe58XPCqNQmPmVUq6CZkPYRms5oLvu", + notifier, + Tezos: new TezosToolkit(MainNetRpcUri.TEZOS), + xpnftAddress: "KT1NEx6MX2GUEKMTX9ydyu8mn9WBNEz3QPEp", + validators: [ + "tz1MwAQrsg5EgeFD1AQHT2FTutnj9yQJNcjM", + "tz1b5AMdXs9nDxsqoN9wa3HTusvhahgBRWuF", + "tz1L5DjmMEHbj5npRzZewSARLmTQQyESW4Mj", + "tz1csq1THV9rKQQexo2XfSjSEJEg2wRCSHsD", + "tz1TBhd1NeZNtWsTbecee8jDMDzeBNLmpViN", + "tz1SHcDnXRgb7kWidiaM2J6bbTS7x5jzBr67", + ], + feeMargin, + }, + velasParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.VELAS), + erc721Minter: "0x3F888c0Ee72943a3Fb1c169684A9d1e8DEB9f537", + erc1155Minter: "0x0cC5F00e673B0bcd1F780602CeC6553aec1A57F0", + erc721_addr: "0x9e5761f7A1360E8B3E9d30Ed9dd3161E8b75d4E8", + erc1155_addr: "0x0B7ED039DFF2b91Eb4746830EaDAE6A0436fC4CB", + minter_addr: "0x40d8160A0Df3D9aad75b9208070CFFa9387bc051", + nonce: Chain.VELAS, + feeMargin, + }, + iotexParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.IOTEX), + minter_addr: "0x4bA4ADdc803B04b71412439712cB1911103380D6", + erc721_addr: "0x6eD7dfDf9678eCb2051c46A1A5E38B4f310b18c5", + erc721Minter: "0xD87755CCeaab0edb28b3f0CD7D6405E1bB827B65", + erc1155Minter: "0x81e1Fdad0658b69914801aBaDA7Aa0Abb31653E5", + erc1155_addr: "0x93Ff4d90a548143c28876736Aa9Da2Bb7B1b52D4", + nonce: Chain.IOTEX, + feeMargin, + }, + auroraParams: { + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.AURORA), + minter_addr: "0x32E8854DC2a5Fd7049DCF10ef2cb5f01300c7B47", + erc721_addr: "0x041AE550CB0e76a3d048cc2a4017BbCB74756b43", + erc1155_addr: "0xca8E2a118d7674080d71762a783b0729AadadD42", + erc1155Minter: "0x0000000000000000000000000000000000000000", + erc721Minter: "0x0000000000000000000000000000000000000000", + nonce: Chain.AURORA, + notifier, + feeMargin, + }, + godwokenParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.GODWOKEN), + minter_addr: "0xeBCDdF17898bFFE81BCb3182833ba44f4dB25525", + erc721_addr: "0x9cdda01E00A5A425143F952ee894ff99B5F7999F", + erc1155_addr: "0x34933A5958378e7141AA2305Cdb5cDf514896035", + erc721Minter: "0x0000000000000000000000000000000000000000", + erc1155Minter: "0x0000000000000000000000000000000000000000", + nonce: Chain.GODWOKEN, + feeMargin, + }, + gateChainParams: { + notifier, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.GATECHAIN), + minter_addr: "0xFc7f7fD2DBdAF6D8F3ee3f222b3a6a9f89729f05", + erc721_addr: "0xD6939f722B977afd7DD934A31bc94d08d4ea4336", + erc1155_addr: "", + erc1155Minter: "0xc45759e51CdDBa46db4D1becC8B8Bcbe5d4a9bB4", + erc721Minter: "0x0000000000000000000000000000000000000000", + nonce: Chain.GATECHAIN, + feeMargin, + }, + skaleParams: { + notifier, + feeMargin, + nonce: Chain.SKALE, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.SKALE), + erc721Minter: "0xC71C2e7b5Ee01f2cb08b41E240976E8Be6012fB0", + erc1155Minter: "0xbe6cB5C730C07a788dAB0aD7ed629d9c418a9c14", + erc1155_addr: "0x783cA58315336dD646aCeCF0b55f728099ee73ec", + erc721_addr: "0xf4C24d031C336CdcC5CC251E5abbE777235A65f3", + minter_addr: "0xa8440b0702923A54bb0FF3B55f458Cfe8142C1A0", + paymentTokenAddress: "0x59ab97Ee239e02112652587F9Ef86CB6F762983b", // Euphoria ETH (ETH) Token + }, + moonbeamParams: { + nonce: Chain.MOONBEAM, + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.MOONBEAM), + erc721Minter: "", + erc1155Minter: "", + erc1155_addr: "0xe535A8De7C42a8bc1633f16965fbc259a3Ef58B6", + erc721_addr: "0xfD3Ce0a10D4731b136a7C9e3f8a37edA1EFbf77f", + minter_addr: "0xBA3Cc81cfc54a4ce99638b5da1F17b15476E7231", + }, + abeyChainParams: { + nonce: Chain.ABEYCHAIN, + notifier, + feeMargin, + provider: new ethers.providers.JsonRpcProvider(MainNetRpcUri.ABEYCHAIN), + erc721Minter: "0xBb5e9896cEe600DaC470775B6f235Db105E861BD", + erc1155Minter: "0x35c3c3959d19A310Fc052545fCC29200dc440CdA", + erc1155_addr: "0xF9DfD29ddEDEa3224f9c7E12c7Bbe37101341786", + erc721_addr: "0x55B1D1891ABb21A5d245d149B49007b55Bd3746D", + minter_addr: "0x4ceDb46481d7118E1D292C318E37510E5919bBe6", + }, + + secretParams: { + notifier, + rpcUrl: MainNetRpcUri.SECRET, + bridge: { + contractAddress: "secret18f66qjjuyudmh7q6s50hwpt9y679lanjs82jkg", + codeHash: + "224f175c92947bbfd656d26e21b5eee40f73eac6aa6b64c328db3c55261ee6b4", + }, + xpnft: { + contractAddress: "secret16zcej6asqrtfq08u3fdjhs03zpl7lgy7q32eps", + codeHash: + "b7f44f7d2f72bfec52b027ee6b3ef802246735b50b2bfe747851876f818d7f45", + }, + umt: { + contractAddress: "", + codeHash: "", + }, + chainId: "24", + feeMargin, + }, + nearParams: { + networkId: "mainnet", + nonce: Chain.NEAR, + rpcUrl: MainNetRpcUri.NEAR, + bridge: "", + xpnft: "", + feeMargin, + notifier, + walletUrl: "https://wallet.mainnet.near.org", + helperUrl: "https://helper.mainnet.near.org", + signatureSvc, + }, + }; + }; +} diff --git a/src/factory/index.ts b/src/factory/index.ts new file mode 100644 index 000000000..e1fffbd2e --- /dev/null +++ b/src/factory/index.ts @@ -0,0 +1,1092 @@ +import { Chain, CHAIN_INFO } from "../consts"; +import { ElrondParams } from "../helpers/elrond"; +import { TronParams } from "../helpers/tron"; +import { Web3Params } from "../helpers/web3"; + +export * from "./cons"; +export * from "./factories"; + +import BigNumber from "bignumber.js"; +import { + ChainNonceGet, + EstimateTxFees, + ExtractAction, + ExtractTxnStatus, + MintNft, + NftInfo, + socketHelper, + TransactionStatus, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, +} from ".."; + +import { UserSigner } from "@elrondnetwork/erdjs/out"; +import { ContractFactory, Wallet } from "@hashgraph/hethers"; +import algosdk from "algosdk"; +import axios from "axios"; +import { ethers, utils } from "ethers"; +import { Base64 } from "js-base64"; +import { bridgeHeartbeat } from "../heartbeat"; +import { + AlgorandHelper, + AlgorandParams, + AlgoSignerH, + algoSignerWrapper, + ClaimNftInfo, +} from "../helpers/algorand"; +import { AptosParams } from "../helpers/aptos"; +import { + BalanceCheck, + EstimateTxFeesBatch, + FeeMargins, + GetFeeMargins, + TransferNftForeignBatch, + UnfreezeForeignNftBatch, + WhitelistCheck, +} from "../helpers/chain"; +import { DfinityParams } from "../helpers/dfinity/dfinity"; +import { + HEDERA_PROXY_ABI, + HEDERA_PROXY_BC, + HEDERA_TOKEN_SERVICE_ABI, +} from "../helpers/hedera/hts_abi"; +import { NearParams } from "../helpers/near"; +import { SecretParams } from "../helpers/secret"; +import { SolanaParams } from "../helpers/solana"; +import { TezosParams } from "../helpers/tezos"; +import { TonParams } from "../helpers/ton"; +import { Web3ERC20Params } from "../helpers/web3_erc20"; +import { + ChainNonce, + HelperMap, + InferChainH, + InferChainParam, + InferNativeNft, + InferSigner, + ParamMap, +} from "../type-utils"; +import { + checkBlockedContracts, + exchangeRateRepo, + getDefaultContract, + prepareTokenId, + _headers, +} from "./cons"; +import base64url from "base64url"; + +export type FullChain = TransferNftForeign< + Signer, + RawNft, + Resp +> & + UnfreezeForeignNft & + EstimateTxFees & + ChainNonceGet & + ValidateAddress & { XpNft: string; XpNft1155?: string } & GetFeeMargins; + +type FullChainBatch = FullChain & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & + EstimateTxFeesBatch; + +/** + * A type representing a chain factory. + */ +export type ChainFactory = { + /** + * Creates an helper factory for a given chain + * @param chain: {@link ChainNonce} to create the helper for. + */ + inner(chain: T): Promise>; + /** + * Whether or not the bridge is alive for a given chain + * this is checked regardless before using any bridge related function(e.g transferNft) is called + */ + bridgeStatus(): Promise<{ [chainNonce: number]: "alive" | "dead" }>; + /** + * Check the balance of an account + * + * @param inner The chain to check the balance in + * @param address address of the account + */ + balance(inner: BalanceCheck, address: string): Promise; + /** + * Transfers the NFT from one chain to other. + * @param fromChain {@link FullChain} the chain to transfer from. Use inner method of the factory to get this. + * @param toChain {@link FullChain} the chain to transfer to. Use inner method of the factory to get this. + * WARN: Algorand NFTs must be manually claimed by the receiver + * @param nft {@link NftInfo} the nft to be transferred. Can be fetched from the `nftList` method of the factory. + * @param sender {@link Sender} The owner of the NFT. + * @param receiver Address of the Receiver of the NFT. Could be Web3 or Elrond or Tron Address. + * @param fee validator fees from {@link estimateFees} (will be calculated automatically if not given) + * @param mintWith an arbitrary address of the target chain minter contract + * @param gasLimit an arbitrary gas limit value (required for some chains) + */ + + transferNft( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo, + sender: SignerF, + receiver: string, + fee?: BigNumber.Value, + mintWith?: string, + gasLimit?: ethers.BigNumberish | undefined, + extraFee?: BigNumber.Value, + gasPrice?: ethers.BigNumberish | undefined + ): Promise; + + transferBatchNft( + fromChain: FullChainBatch, + toChain: FullChainBatch, + nft: NftInfo[], + sender: SignerF, + receiver: string, + fee?: BigNumber.Value, + mintWith?: string + ): Promise; + + claimHederaNFT( + serialNumber: ethers.BigNumberish, + proxyAddress: string, + htsToken: string, + sender: Wallet + ): Promise; + + listHederaClaimableNFT( + proxyContract: string, + htsToken: string, + sender: Wallet + ): Promise; + + transferSft( + fromChain: FullChainBatch, + toChain: FullChainBatch, + nft: NftInfo, + sender: SignerF, + receiver: string, + amt: bigint, + fee?: BigNumber.Value, + mintWith?: string + ): Promise; + /** + * Mints an NFT on the chain. + * @param chain: {@link MintNft} Chain to mint the nft on. Can be obtained from the `inner` method on the factory. + * @param owner: {@link Signer} A signer to sign transaction, can come from either metamask, tronlink, or the elrond's maiar defi wallet. + * @param args: {@link NftMintArgs} Arguments to mint the nft. Contract is must for web3 and tron. Identifier is must for elrond. + */ + mint( + chain: MintNft, + owner: Signer, + args: Args + ): Promise; + /** + * Lists all the NFTs on the chain owner by {@param owner}. + * @param chain: Chain on which the NFT was minted. Can be obtained from the `inner` method on the factory. + * @param owner: Address of the owner of the NFT as a raw string. + */ + nftList( + chain: ChainNonceGet & T, + owner: string + ): Promise>[]>; + /** + * Estimates the required fee for transferring an NFT. + * @param fromChain: {@link FullChain} Chain on which the NFT was minted. Can be obtained from the `inner` method on the factory. + * @param toChain: {@link FullChain} Chain to which the NFT must be sent. Can be obtained from the `inner` method on the factory. + * @param nft: {@link NftInfo} The NFT that has to be transferred. Generally comes from the `nftList` method of the factory. + * @param receiver: Address of the receiver of the NFT in raw string.. + */ + estimateFees( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo, + receiver: string + ): Promise; + + estimateWithContractDep( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo, + receiver: string + ): Promise<{ calcContractDep: BigNumber }>; + + estimateSFTfees( + fromChain: FullChain, + amount: bigint, + price: number + ): Promise; + + estimateBatchFees( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo[], + receiver: string + ): Promise; + /** + * @param nonce : {@link ChainNonce} could be a ElrondNonce, Web3Nonce, or TronNonce. + * @param params : New Params to be set. + */ + updateParams( + nonce: T, + params: InferChainParam + ): void; + pkeyToSigner( + nonce: S, + key: string + ): Promise>>; + /** + * Get transaction in the destination chain + * WARN: use claimAlgorandNft instead for algorand. + * + * @param chain source chain + * @param destination destination chain + * @param hash transaction hash from source chain + * + * @returns transaction hash in original chain, unique action id + */ + getDestinationTransaction( + chain: ExtractAction & ExtractTxnStatus, + destination: number, + hash: Txn + ): Promise<[string, TransactionStatus]>; + /** + * Claim an algorand nft + * + * @param originChain chain from which the nft was transferred + * @param txn Transaction Hash of the original + * @param claimer the account which can claim the nft + */ + waitAlgorandNft( + originChain: ExtractAction & ChainNonceGet, + txn: Txn, + claimer: AlgoSignerH + ): Promise; + /** + * @param claimer: the account which can claim the nfts + */ + claimableAlgorandNfts(claimer: string): Promise; + + getVerifiedContract( + from: string, + targetChain: number, + fc: number, + tokenId?: string + ): Promise; + + checkWhitelist( + chain: Partial> & ChainNonceGet, + nft: NftInfo + ): Promise; + + isWrappedNft( + nft: NftInfo, + fromChain: number + ): Promise<{ bool: boolean; wrapped: any }>; + + setProvider(fromChain: number, provider: any): Promise; + + whitelistEVM( + chain: T, + address: string, + nonce: number + ): Promise<{ success: true }>; +}; + +/** + * A type representing all the supported chain params. + */ +export interface ChainParams { + elrondParams: ElrondParams; + hecoParams: Web3Params; + bscParams: Web3Params; + ropstenParams: Web3Params; + avalancheParams: Web3Params; + polygonParams: Web3Params; + fantomParams: Web3Params; + tronParams: TronParams; + celoParams: Web3Params; + harmonyParams: Web3Params; + ontologyParams: Web3Params; + xDaiParams: Web3Params; + algorandParams: AlgorandParams; + fuseParams: Web3Params; + uniqueParams: Web3Params; + tezosParams: TezosParams; + velasParams: Web3Params; + iotexParams: Web3Params; + vechainParams: Web3Params; + auroraParams: Web3Params; + godwokenParams: Web3Params; + gateChainParams: Web3Params; + secretParams: SecretParams; + hederaParams: Web3Params; + skaleParams: Web3ERC20Params; + dfinityParams: DfinityParams; + nearParams: NearParams; + moonbeamParams: Web3Params; + abeyChainParams: Web3Params; + tonParams: TonParams; + aptosParams: AptosParams; + solanaParams: SolanaParams; + caduceusParams: Web3Params; + okcParams: Web3Params; + arbitrumParams: Web3Params; + bitgertParams: Web3Params; +} + +export type MoralisNetwork = "mainnet" | "testnet"; + +/** + * A struct for the configuration of the library. + * @field exchangeRateUri: The URI of the exchange rate service. + * @field moralisServer: The URI of the moralis server. + * @field moralisAppId: The app id of the moralis server. + * @field tronScanUri: The URI of the tron scan service. + */ +export interface AppConfig { + exchangeRateUri: string; + heartbeatUri: string; + txSocketUri: string; + nftListUri: string; + nftListAuthToken: string; + tronScanUri: string; + wrappedNftPrefix: string; + scVerifyUri: string; + network: "testnet" | "mainnet" | "staging"; +} + +function mapNonceToParams(chainParams: Partial): ParamMap { + const cToP: ParamMap = new Map(); + cToP.set(Chain.ELROND, chainParams.elrondParams); + cToP.set(Chain.HECO, chainParams.hecoParams); + cToP.set(Chain.BSC, chainParams.bscParams); + cToP.set(Chain.ETHEREUM, chainParams.ropstenParams); + cToP.set(Chain.AVALANCHE, chainParams.avalancheParams); + cToP.set(Chain.POLYGON, chainParams.polygonParams); + cToP.set(Chain.FANTOM, chainParams.fantomParams); + cToP.set(Chain.TRON, chainParams.tronParams); + cToP.set(Chain.CELO, chainParams.celoParams!); + cToP.set(Chain.HARMONY, chainParams.harmonyParams); + cToP.set(Chain.ONT, chainParams.ontologyParams); + cToP.set(Chain.XDAI, chainParams.xDaiParams); + cToP.set(Chain.ALGORAND, chainParams.algorandParams); + cToP.set(Chain.FUSE, chainParams.fuseParams); + cToP.set(Chain.UNIQUE, chainParams.uniqueParams); + cToP.set(Chain.TEZOS, chainParams.tezosParams); + cToP.set(Chain.VELAS, chainParams.velasParams); + cToP.set(Chain.IOTEX, chainParams.iotexParams); + cToP.set(Chain.AURORA, chainParams.auroraParams); + cToP.set(Chain.GODWOKEN, chainParams.godwokenParams); + cToP.set(Chain.GATECHAIN, chainParams.gateChainParams); + cToP.set(Chain.VECHAIN, chainParams.vechainParams); + cToP.set(Chain.SECRET, chainParams.secretParams); + cToP.set(Chain.HEDERA, chainParams.hederaParams); + cToP.set(Chain.SKALE, chainParams.skaleParams); + cToP.set(Chain.DFINITY, chainParams.dfinityParams); + cToP.set(Chain.NEAR, chainParams.nearParams); + cToP.set(Chain.MOONBEAM, chainParams.moonbeamParams); + cToP.set(Chain.ABEYCHAIN, chainParams.abeyChainParams); + cToP.set(Chain.TON, chainParams.tonParams); + cToP.set(Chain.APTOS, chainParams.aptosParams); + cToP.set(Chain.SOLANA, chainParams.solanaParams); + cToP.set(Chain.CADUCEUS, chainParams.caduceusParams); + cToP.set(Chain.OKC, chainParams.okcParams); + cToP.set(Chain.ARBITRUM, chainParams.arbitrumParams); + cToP.set(Chain.BITGERT, chainParams.bitgertParams); + return cToP; +} +/** + * This function is the basic entry point to use this package as a library. + * @param appConfig: {@link AppConfig} The configuration of the library. + * @param chainParams: {@link ChainParams} Contains the details for all the chains to mint and transfer NFTs between them. + * @returns {ChainFactory}: A factory object that can be used to mint and transfer NFTs between chains. + */ +export function ChainFactory( + appConfig: AppConfig, + chainParams: Partial +): ChainFactory { + let helpers: HelperMap = new Map(); + let cToP = mapNonceToParams(chainParams); + + const heartbeatRepo = bridgeHeartbeat(appConfig.heartbeatUri); + + const remoteExchangeRate = exchangeRateRepo(appConfig.exchangeRateUri); + + const txSocket = socketHelper(appConfig.txSocketUri); + + const nftlistRest = axios.create({ + baseURL: appConfig.nftListUri, + headers: { + Authorization: `Bearer ${appConfig.nftListAuthToken}`, + }, + }); + + const inner = async ( + chain: T + ): Promise> => { + let helper = helpers.get(chain); + if (helper === undefined) { + helper = await CHAIN_INFO.get(chain)!.constructor(cToP.get(chain)!); + helpers.set(chain, helper); + } + return helper!; + }; + + const setProvider = async (chain: T, provider: any) => { + const args = { + ...cToP.get(chain)!, + provider, + }; + const helper = await CHAIN_INFO.get(chain)!.constructor(args); + helpers.set(chain, helper); + }; + + async function calcExchangeFees( + fromChain: T, + toChain: T, + val: BigNumber, + toChainFee: FeeMargins + ): Promise { + const rate = await remoteExchangeRate.getBatchedRate([ + CHAIN_INFO.get(toChain)!.currency, + CHAIN_INFO.get(fromChain)!.currency, + ]); + const feeR = val.dividedBy(CHAIN_INFO.get(toChain)!.decimals); + const fromExRate = rate.get(CHAIN_INFO.get(fromChain)!.currency)!; + const toExRate = rate.get(CHAIN_INFO.get(toChain)!.currency)!; + const usdFee = Math.min( + Math.max(toChainFee.min, feeR.times(toExRate * 0.1).toNumber()), + toChainFee.max + ); + const feeProfit = usdFee / fromExRate; + + return feeR + .times(toExRate / fromExRate) + .plus(feeProfit * 0.5) + .times(CHAIN_INFO.get(fromChain)!.decimals) + .integerValue(BigNumber.ROUND_CEIL); + } + const estimateFees = async ( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo, + receiver: string, + extraFee?: BigNumber.Value + ) => { + const estimate = await toChain.estimateValidateTransferNft( + receiver, + nft as any, + "" + ); + + let conv = await calcExchangeFees( + fromChain.getNonce(), + toChain.getNonce(), + estimate, + toChain.getFeeMargin() + ); + + if (extraFee) { + conv = conv.multipliedBy(extraFee).integerValue(BigNumber.ROUND_CEIL); + console.log("extra conv"); + } + + return conv; + }; + + const estimateWithContractDep = async < + SignerF, + RawNftF, + SignerT, + RawNftT, + Resp + >( + fromChain: FullChain, + toChain: FullChain, + nft: NftInfo + ) => { + let calcContractDep: BigNumber = new BigNumber("0"), + originalContract, + originalChain; + try { + const { bool, wrapped } = await isWrappedNft( + nft, + fromChain.getNonce(), + toChain.getNonce() + ); + + if (bool) { + originalContract = wrapped?.contract?.toLowerCase(); + originalChain = wrapped?.origin; + } else { + originalContract = nft.native.contract.toLowerCase(); + originalChain = nft.native.chainId; + } + + const [checkWithOutTokenId, verifyList] = await Promise.all([ + axios + .post(`https://sc-verify.xp.network/default/checkWithOutTokenId`, { + fromChain: Number(originalChain), + chain: + fromChain?.getNonce() == originalChain //if first time sending + ? Number(toChain.getNonce()) + : toChain.getNonce() == originalChain //if sending back + ? Number(fromChain.getNonce()) + : Number(toChain.getNonce()), //all the rest + sc: originalContract, + }) + .catch(() => false), + axios + .get( + `https://sc-verify.xp.network/verify/list?from=${originalContract}&targetChain=${toChain.getNonce()}&fromChain=${fromChain.getNonce()}&tokenId=1` + ) + .then((res) => { + return res.data.data.length > 0 && res.data.code == 200; + }) + .catch(() => false), + ]); + + if (!checkWithOutTokenId && !verifyList && toChain?.estimateContractDep) { + //@ts-ignore + const contractFee = await toChain?.estimateContractDep(toChain); + calcContractDep = await calcExchangeFees( + fromChain.getNonce(), + toChain.getNonce(), + contractFee, + toChain.getFeeMargin() + ); + } + + return { calcContractDep }; + } catch (error: any) { + console.log( + error.message, + console.log("error in estimateWithContractDep") + ); + return { calcContractDep }; + } + }; + + const estimateSFTfees = async ( + fromChain: FullChain, + amount: bigint, + price: number = 0.05 + ) => { + const rate = await remoteExchangeRate.getBatchedRate([ + CHAIN_INFO.get(fromChain.getNonce())!.currency, + ]); + + const fromExRate = rate.get( + CHAIN_INFO.get(fromChain.getNonce())!.currency + )!; + const y = price / fromExRate; + + const sftFees = Number(amount) <= 10 ? 0 : y * (Number(amount) - 10); + return new BigNumber(sftFees) + .multipliedBy(CHAIN_INFO.get(fromChain.getNonce())!.decimals) + .integerValue(); + }; + + async function bridgeStatus(): Promise<{ [x: number]: "alive" | "dead" }> { + const res = await heartbeatRepo.status(); + return Object.fromEntries( + Object.entries(res).map(([c, s]) => [ + c, + s.bridge_alive ? "alive" : "dead", + ]) + ); + } + + async function estimateBatchFees( + fromChain: FullChainBatch, + toChain: FullChainBatch, + nft: NftInfo[], + receiver: string + ): Promise { + const estimate = await toChain.estimateValidateTransferNftBatch( + receiver, + nft as any, + new Array(nft.length).fill(toChain.XpNft) + ); + const conv = await calcExchangeFees( + fromChain.getNonce(), + toChain.getNonce(), + estimate.times(nft.length), + toChain.getFeeMargin() + ); + return conv; + } + + async function requireBridge(chains: number[]): Promise { + const status = await heartbeatRepo.status(); + let deadChain: number | undefined; + const alive = chains.every((c) => { + const stat = status[c].bridge_alive; + if (!stat) { + deadChain = c; + } + return stat; + }); + if (!alive) { + throw Error(`chain ${deadChain} is dead! its unsafe to use the bridge`); + } + } + + const oldXpWraps = new Set([ + "0xe12B16FFBf7D79eb72016102F3e3Ae6fe03fCA56", + "0xc69ECD37122A9b5FD7e62bC229d478BB83063C9d", + "0xe12B16FFBf7D79eb72016102F3e3Ae6fe03fCA56", + "0xa1B8947Ff4C1fD992561F629cfE67aEb90DfcBd5", + "0x09F4e56187541f2bC660B0810cA509D2f8c65c96", + "0x8B2957DbDC69E158aFceB9822A2ff9F2dd5BcD65", + "0xE773Be36b35e7B58a9b23007057b5e2D4f6686a1", + "0xFC2b3dB912fcD8891483eD79BA31b8E5707676C9", + "0xb4A252B3b24AF2cA83fcfdd6c7Fac04Ff9d45A7D", + ]); + + function checkNotOldWrappedNft(contract: string) { + if (oldXpWraps.has(contract)) { + throw new Error(`${contract} is an old wrapped NFT`); + } + } + + async function isWrappedNft(nft: NftInfo, fc: number, tc?: number) { + if (fc === Chain.TEZOS) { + return { + bool: + typeof (nft.native as any).meta?.token?.metadata?.wrapped !== + "undefined", + wrapped: undefined, + }; + } + /*if (fc === Chain.NEAR) { + const data = (nft as any).native?.wrapped || (nft as any).wrapped; + return { + bool: typeof data !== "undefined", + wrapped: undefined, + }; + }*/ + try { + checkNotOldWrappedNft(nft.collectionIdent); + } catch (_) { + return { bool: false, wrapped: undefined }; + } + + const wrapped = (await axios.get(nft.uri).catch(() => undefined))?.data + .wrapped; + const contract = wrapped?.contract || wrapped?.source_mint_ident; + tc && contract && checkBlockedContracts(tc, contract); + + return { bool: typeof wrapped !== "undefined", wrapped }; + } + + async function algoOptInCheck( + nft: NftInfo, + toChain: FullChain, + receiver: string + ) { + if ("meta" in (nft.native as Record)) return; + const nftDat = await axios.get(nft.uri); + if ( + nftDat.data.wrapped.origin == Chain.ALGORAND.toString() && + "isOptIn" in toChain && + !(await (toChain as AlgorandHelper).isOptIn( + receiver, + parseInt(nftDat.data.wrapped.assetID) + )) + ) { + throw Error("receiver hasn't opted-in to wrapped nft"); + } + } + + async function getVerifiedContract( + from: string, + tc: number, + fc: number, + tokenId?: string + ): Promise { + const res = await axios + .post<{ data: string }>( + `${appConfig.scVerifyUri}/default/`, + { + sc: from, + chain: tc, + fromChain: fc, + tokenId: tokenId && !isNaN(Number(tokenId)) ? tokenId : undefined, + }, + { + headers: _headers, + } + ) + .catch(() => { + return undefined; + }); + return res?.data.data; + } + + async function checkMintWith( + from: string, + to: string, + targetChain: number, + fromChain: number, + tokenId?: string + ): Promise { + const res = await axios + .post<{ data: "allowed" | "not allowed" }>( + `${appConfig.scVerifyUri}/verify`, + { from, to, targetChain, fromChain, tokenId }, + { + headers: _headers, + } + ) + .catch(() => undefined); + + return res?.data.data == "allowed"; + } + + return { + estimateWithContractDep, + getVerifiedContract, + balance: (i, a) => i.balance(a), + async transferBatchNft(from, to, nfts, signer, receiver, fee, mw) { + type Result = ReturnType; + let result: Result[] = []; + if (appConfig.network === "mainnet") { + await requireBridge([from.getNonce(), to.getNonce()]); + } + + if (!fee) { + fee = await estimateBatchFees(from, to, nfts, receiver); + } + if (!(await to.validateAddress(receiver))) { + throw Error("invalid address"); + } + console.log(`Batch Minting With: ${mw || to.XpNft1155!}`); + const wrapped: NftInfo[] = []; + const unwrapped: NftInfo[] = []; + await Promise.all( + nfts.map(async (e) => { + // @ts-ignore + if (e.native.contractType && e.native.contractType === "ERC721") { + throw new Error(`ERC721 is not supported`); + } + if ((await isWrappedNft(e, from.getNonce())).bool) { + wrapped.push(e); + } else { + unwrapped.push(e); + } + }) + ); + unwrapped.length && + result.push( + from.transferNftBatchToForeign( + signer, + to.getNonce(), + receiver, + unwrapped, + mw || to.XpNft1155!, + new BigNumber(fee) + ) + ); + wrapped.length && + result.push( + from.unfreezeWrappedNftBatch( + signer, + to.getNonce(), + receiver, + wrapped, + new BigNumber(fee) + ) + ); + return await Promise.all(result); + }, + estimateBatchFees, + async whitelistEVM(chain: T, address: string) { + const chainLocal = cToP.get(chain); + + if (!chainLocal) throw new Error("Chain not found"); + const params = await CHAIN_INFO.get(chain)?.constructor(chainLocal); + if (!params) throw new Error("An error occured"); + const isAddressValid = await params.validateAddress(address); + if (!isAddressValid) throw new Error("Address is not valid"); + + try { + await chainLocal.notifier.notifyEVM(chain, address); + return { success: true }; + } catch (error) { + throw new Error("An error occured"); + } + }, + async transferSft(from, to, nft, sender, receiver, amt, fee?, mintWith?) { + if (Number(amt) > 50) + throw new Error("Currenly more that 50 SFTs is not supported"); + let transfers = Array(parseInt(amt.toString())).fill(nft); + if (!fee) { + fee = await estimateFees(from, to, transfers[0], receiver); + } + const sftFees = await estimateSFTfees(from, amt, 0.05); + const x = new BigNumber(fee).plus(sftFees); + + console.log(x.toNumber()); + + if (amt === BigInt(1)) { + const response = this.transferNft( + from, + to, + nft, + sender, + receiver, + new BigNumber(x!).integerValue(), + mintWith + ); + return response as any; + } else { + const response = this.transferBatchNft( + from, + to, + transfers, + sender, + receiver, + new BigNumber(x!).integerValue(), + mintWith + ); + return response as any; + } + + const response = this.transferBatchNft( + from, + to, + transfers, + sender, + receiver, + new BigNumber(x!).integerValue(), + mintWith + ); + return response; + }, + async getDestinationTransaction( + chain: ExtractAction & ExtractTxnStatus, + targetNonce: number, + txn: T + ) { + const action = await chain.extractAction(txn); + const hash = await txSocket.waitTxHash(targetNonce, action); + const status = await chain.extractTxnStatus(hash); + return [hash, status]; + }, + async pkeyToSigner(nonce: T, key: string) { + switch (nonce) { + case Chain.ELROND: { + return UserSigner.fromPem(key); + } + case Chain.TRON: { + return key; + } + case Chain.ALGORAND: { + const algo = await inner(Chain.ALGORAND); + const mnem = algosdk.secretKeyToMnemonic(Base64.toUint8Array(key)); + return algoSignerWrapper( + algo.algod, + algosdk.mnemonicToSecretKey(mnem) + ); + } + default: { + const chainH = (await inner(nonce)) as any; + return chainH.createWallet(key); + } + } + }, + estimateFees, + estimateSFTfees, + inner, + bridgeStatus, + updateParams( + chainNonce: T, + params: InferChainParam + ) { + helpers.delete(chainNonce); + cToP.set(chainNonce, params); + }, + async nftList(chain: ChainNonceGet & T, owner: string) { + if (chain.getNonce() === Chain.TON) { + console.log("decode for ton"); + owner = base64url.encode(owner); + } + + let res = await nftlistRest.get<{ data: NftInfo>[] }>( + `/nfts/${chain.getNonce()}/${owner}` + ); + + if (res.headers["Retry-After"]) { + await new Promise((r) => setTimeout(r, 30000)); + return await this.nftList(chain, owner); + } + return res.data.data; + }, + transferNft: async ( + fromChain, + toChain, + nft, + sender, + receiver, + fee, + mintWith, + gasLimit, + extraFee, + gasPrice + ) => { + //@ts-ignore + if (nft.native.contract) { + if (![9, 18, 24, 31, 27, 26].includes(fromChain.getNonce())) { + //@ts-ignore + checkNotOldWrappedNft(utils.getAddress(nft.native.contract)); + } + } + + if (appConfig.network === "mainnet") { + await requireBridge([fromChain.getNonce(), toChain.getNonce()]); + } + + if (!fee) { + fee = await estimateFees(fromChain, toChain, nft, receiver, extraFee); + console.log(new BigNumber(fee).toString()); + } + // if (!(await toChain.validateAddress(receiver))) { + // throw Error("invalid address"); + // } + + if ( + (await isWrappedNft(nft, fromChain.getNonce(), toChain.getNonce())).bool + ) { + await algoOptInCheck(nft, toChain, receiver); + + const res = await fromChain.unfreezeWrappedNft( + sender, + receiver, + nft, + new BigNumber(fee), + toChain.getNonce().toString(), + gasLimit, + gasPrice + ); + + return res; + } else { + const mw = + //@ts-ignore contract is checked + "contract" in nft.native && + mintWith && + (await checkMintWith( + nft.collectionIdent, + mintWith, + toChain.getNonce(), + fromChain.getNonce(), + prepareTokenId(nft, fromChain.getNonce()) + )) + ? mintWith + : getDefaultContract(nft, fromChain, toChain); + + console.log(`Minting With : ${mw}`); + + if (mw === undefined) { + throw new Error(`Mint with is not set`); + } + + const res = await fromChain.transferNftToForeign( + sender, + toChain.getNonce(), + receiver, + nft, + new BigNumber(fee), + mw, + gasLimit, + gasPrice + ); + + return res; + } + }, + mint: async ( + chain: MintNft, + owner: Signer, + args: Args + ): Promise => { + return await chain.mintNft(owner, args); + }, + /** + * Claim a transferred NFT + * @param serialNumber The Serial Number of the claimable NFTs + * @param contractAddress The MintWith HTS Proxy Contract used in the transfer + * @param sender wallet of the sender + * @returns txn response of the claimer + */ + async claimHederaNFT(serialNumber, contractAddress, htsToken, sender) { + const htscf = new ContractFactory( + HEDERA_PROXY_ABI, + HEDERA_PROXY_BC, + sender + ); + const hts_contract = htscf.attach(contractAddress); + const cf = new ContractFactory(HEDERA_TOKEN_SERVICE_ABI, "0x", sender); + const contract = cf.attach("0x0000000000000000000000000000000000000167"); + ( + await contract.associateToken(await sender.getAddress(), htsToken, { + gasLimit: 1000000, + }) + ).wait(); + + const res = await hts_contract.functions.claimNft( + serialNumber, + htsToken, + { + gasLimit: 1000000, + } + ); + return res; + }, + /** + * Returns all the claimable NFTs of the contract + * @param proxyContract the address of the HTS Proxy contract that was used as mintWith in the transfer + * @param sender wallet of the sender + * @returns array of tokens that were minted + */ + async listHederaClaimableNFT(proxyContract, htsToken, sender) { + const cf = new ContractFactory(HEDERA_PROXY_ABI, HEDERA_PROXY_BC, sender); + const contract = cf.attach(proxyContract); + const tokens = await contract.functions.getClaimableNfts( + await sender.getAddress(), + htsToken, + { + gasLimit: 1000000, + } + ); + return tokens[0]; + }, + waitAlgorandNft: async (origin, hash, claimer) => { + const action = await origin.extractAction(hash); + + return await txSocket.waitAlgorandNft( + origin.getNonce(), + claimer.address, + action + ); + }, + claimableAlgorandNfts: async (claimer) => { + const algo: AlgorandHelper = await inner(Chain.ALGORAND); + return await algo.claimableNfts(txSocket, claimer); + }, + async checkWhitelist(chain, nft) { + if ( + !chain.isNftWhitelisted || + (await isWrappedNft(nft, chain.getNonce())).bool + ) { + return true; + } + + return await chain.isNftWhitelisted(nft); + }, + isWrappedNft, + setProvider, + }; +} diff --git a/src/fakeERC1155.json b/src/fakeERC1155.json deleted file mode 100644 index 50e1189f7..000000000 --- a/src/fakeERC1155.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "uri_", - "type": "string" - } - ], - "name": "setURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/src/fakeERC721.json b/src/fakeERC721.json deleted file mode 100644 index 8a0718e80..000000000 --- a/src/fakeERC721.json +++ /dev/null @@ -1,365 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "CANNOT_TRANSFER_TO_ZERO_ADDRESS", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NOT_CURRENT_OWNER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_approved", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceID", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/src/heartbeat/index.ts b/src/heartbeat/index.ts new file mode 100644 index 000000000..ec022a78f --- /dev/null +++ b/src/heartbeat/index.ts @@ -0,0 +1,19 @@ +import axios from "axios"; +import { StatusResp } from "./resp"; + +export type BridgeHeartbeat = { + status(): Promise; +}; + +export function bridgeHeartbeat(baseURL: string): BridgeHeartbeat { + const api = axios.create({ + baseURL, + }); + + return { + async status() { + const res = await api.get("/status"); + return res.data; + }, + }; +} diff --git a/src/heartbeat/resp.ts b/src/heartbeat/resp.ts new file mode 100644 index 000000000..68263169d --- /dev/null +++ b/src/heartbeat/resp.ts @@ -0,0 +1,18 @@ +type DeathReason = { + component: "node" | "validator" | "balance"; + error: string; +}; + +type ValidatorStatus = { + status: "alive" | "dead"; + death_reason?: DeathReason; +}; + +type ChainStatus = { + bridge_alive: boolean; + validators: ValidatorStatus[]; +}; + +export type StatusResp = { + [chainNonce: string]: ChainStatus; +}; diff --git a/src/helpers/algorand.ts b/src/helpers/algorand.ts new file mode 100644 index 000000000..1e8112f10 --- /dev/null +++ b/src/helpers/algorand.ts @@ -0,0 +1,565 @@ +import WalletConnect from "@walletconnect/client"; +import algosdk, { SuggestedParams } from "algosdk"; +import { formatJsonRpcRequest } from "@json-rpc-tools/utils"; +import { BigNumber } from "bignumber.js"; +import { Base64 } from "js-base64"; +import { + AlgorandSocketHelper, + Chain, + ChainNonceGet, + EstimateTxFees, + NftInfo, + PreTransfer, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, +} from ".."; +import MyAlgoConnect from "@randlabs/myalgo-connect"; +import { EvNotifier } from "../notifier"; +import { BalanceCheck, FeeMargins, GetFeeMargins, GetTokenURI } from "./chain"; + +type TxResp = { + txId: string; +}; + +type AlgoNft = { + "metadata-hash"?: string; + name?: string; + "unit-name"?: string; + url: string; + creator: string; + nftId: number; +}; + +type SignedTxn = { + txID?: string; + blob: string; +}; + +type Ledger = "MainNet" | "TestNet" | "any"; + +type BrowserSigner = { + accounts(args: { ledger: Ledger }): Promise<{ address: string }[]>; + signTxn(transactions: { txn: string }[]): Promise; + send(info: { ledger: Ledger; tx: string }): Promise; +}; + +export type ClaimNftInfo = { + appId: number; + nftId: number; +}; + +/** + * Selected address & ledger must be given explicitly + */ +export type AlgoSignerH = { + readonly algoSigner: BrowserSigner; + readonly address: string; + readonly ledger: Ledger; +}; + +/** + * This library is written in typescript. + * unfortunately the browser extension injects the AlgoSigner in a way we can't get a typed object wwithout this hack. + * + * @return Strongly typed AlgoSigner from extension + */ +export function typedAlgoSigner(): BrowserSigner { + //@ts-expect-error why do you inject libraries like this :| + if (typeof AlgoSigner === "undefined") { + throw Error("algosigner not available!"); + } + + //@ts-expect-error why do you inject libraries like this :| + return AlgoSigner; +} + +export function algoSignerWrapper( + algod: algosdk.Algodv2, + acc: algosdk.Account +): AlgoSignerH { + const signer: BrowserSigner = { + accounts(_) { + return Promise.resolve([ + { + address: acc.addr, + }, + ]); + }, + signTxn(txns) { + return Promise.resolve( + txns.map((t) => { + const signed = algosdk.signTransaction( + algosdk.decodeUnsignedTransaction(Base64.toUint8Array(t.txn)), + acc.sk + ); + return { + txID: signed.txID, + blob: Base64.fromUint8Array(signed.blob), + }; + }) + ); + }, + send({ tx }) { + return algod.sendRawTransaction(Base64.toUint8Array(tx)).do(); + }, + }; + + return { + algoSigner: signer, + address: acc.addr, + ledger: "any", + }; +} + +export type FullClaimNft = ClaimNftInfo & { + name: string; + uri: string; +}; + +export type AlgorandHelper = ChainNonceGet & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ValidateAddress & { + algod: algosdk.Algodv2; + claimNft(claimer: AlgoSignerH, info: ClaimNftInfo): Promise; + claimableNfts( + txSocket: AlgorandSocketHelper, + owner: string + ): Promise; + isOptIn(address: string, nftId: number): Promise; + optInNft( + signer: AlgoSignerH, + info: ClaimNftInfo + ): Promise; + walletConnectSigner(connector: WalletConnect, address: string): AlgoSignerH; + myAlgoSigner(myAlgo: MyAlgoConnect, address: string): AlgoSignerH; + } & Pick< + PreTransfer, + "preTransfer" + > & { XpNft: string } & GetFeeMargins & + BalanceCheck & + GetTokenURI; + +export type AlgorandParams = { + algodApiKey: string; + algodUri: string; + indexerUri: string; + algodPort: number | undefined; + sendNftAppId: number; + notifier: EvNotifier; + feeMargin: FeeMargins; +}; + +// type MinWrappedNft = { +// wrapped: { +// origin: string; +// }; +// }; + +const encoder = new TextEncoder(); +const MINT_NFT_COST = new BigNumber(1000); + +export function algorandHelper(args: AlgorandParams): AlgorandHelper { + const appAddr = algosdk.getApplicationAddress(args.sendNftAppId); + const algod = new algosdk.Algodv2( + args.algodApiKey, + args.algodUri, + args.algodPort + ); + const indexer = new algosdk.Indexer( + args.algodApiKey, + args.indexerUri, + args.algodPort + ); + + async function waitTxnConfirm(txId: string) { + const status = await algod.status().do(); + let lastRound = status["last-round"]; + algod.pendingTransactionsInformation(); + let pendingInfo = (await algod + .pendingTransactionInformation(txId) + .do() + .catch(() => ({}))) as Record; + + while ( + !(pendingInfo["confirmed-round"] && pendingInfo["confirmed-round"] > 0) + ) { + lastRound += 1; + await algod.statusAfterBlock(lastRound).do(); + pendingInfo = await algod.pendingTransactionInformation(txId).do(); + } + } + + // async function compileProgram( + // client: Algodv2, + // programSource: string + // ) { + // const enc = new TextEncoder(); + // const programBytes = enc.encode(programSource); + // const compileResponse = await client.compile(programBytes).do(); + // const compiledBytes = new Uint8Array( + // Buffer.from(compileResponse.result, 'base64') + // ); + // return compiledBytes; + // }; + + // async function getMintPoolProgram(client: Algodv2, recv: any) { + // const poolSrc = fs.readFileSync(__dirname + '/bridge_pool.tmpl.teal'); + // return await compileProgram( + // client, + // poolSrc.toString().replace('TMPL_RECV_ADDR', recv) + // ); + // } + + const transferNft = async ( + signer: AlgoSignerH, + chain_nonce: number, + to: string, + nft: NftInfo, + txFees: BigNumber, + mintWith?: string + ) => { + const suggested = await algod.getTransactionParams().do(); + + const transferTx = + algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: signer.address, + to: appAddr, + amount: 1, + assetIndex: nft.native.nftId, + suggestedParams: suggested, + }); + + const paymentTxn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + from: signer.address, + suggestedParams: suggested, + to: appAddr, + amount: BigInt(txFees.toString()), + }); + const appArgs = [ + encoder.encode("freeze_nft"), + encoder.encode(to), + new Uint8Array( + Buffer.concat([ + Buffer.from(new Uint32Array([0]).buffer), + Buffer.from(new Uint32Array([chain_nonce]).buffer).reverse(), + ]) + ), + ]; + if (mintWith) { + appArgs.push(encoder.encode(mintWith)); + } + const tCallTx = algosdk.makeApplicationNoOpTxnFromObject({ + from: signer.address, + appIndex: args.sendNftAppId, + appArgs, + foreignAssets: [nft.native.nftId], + suggestedParams: suggested, + }); + algosdk.assignGroupID([tCallTx, transferTx, paymentTxn]); + const encodedTxns = [ + { txn: Base64.fromUint8Array(tCallTx.toByte()) }, + { txn: Base64.fromUint8Array(transferTx.toByte()) }, + { txn: Base64.fromUint8Array(paymentTxn.toByte()) }, + ]; + const signedTxns = await signer.algoSigner.signTxn(encodedTxns); + const sendRes = await algod + .sendRawTransaction([ + Base64.toUint8Array(signedTxns[0].blob), + Base64.toUint8Array(signedTxns[1].blob), + Base64.toUint8Array(signedTxns[2].blob), + ]) + .do(); + await waitTxnConfirm(sendRes.txId); + + await args.notifier.notifyAlgorand(sendRes.txId); + + return sendRes.txId as string; + }; + + async function isOptIn(addr: string, nftId: number) { + const userRes = await indexer.lookupAccountByID(addr).do(); + const user = userRes["account"]; + if (!user.assets) return false; + + for (let i = 0; i < user["assets"].length; i++) { + if (user["assets"][i]["asset-id"] === nftId) { + return true; + } + } + + return false; + } + + async function optInNft(signer: AlgoSignerH, nft: ClaimNftInfo) { + if (await isOptIn(signer.address, nft.nftId)) { + return undefined; + } + + const suggested = await algod.getTransactionParams().do(); + const optIn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: signer.address, + to: signer.address, + amount: 0, + assetIndex: nft.nftId, + suggestedParams: suggested, + }); + const encodedTx = Base64.fromUint8Array(optIn.toByte()); + const signedTx = await signer.algoSigner.signTxn([{ txn: encodedTx }]); + const res = await signer.algoSigner.send({ + ledger: signer.ledger, + tx: signedTx[0].blob, + }); + await waitTxnConfirm(res.txId); + return res.txId; + } + + async function claimNft(signer: AlgoSignerH, info: ClaimNftInfo) { + await optInNft(signer, info); + + const suggested = await algod.getTransactionParams().do(); + const txn = algosdk.makeApplicationNoOpTxnFromObject({ + from: signer.address, + suggestedParams: suggested, + appIndex: info.appId, + appArgs: [encoder.encode("transfer_nft")], + foreignAssets: [info.nftId], + }); + + const encodedTx = Base64.fromUint8Array(txn.toByte()); + const signedTx = await signer.algoSigner.signTxn([{ txn: encodedTx }]); + const res = await signer.algoSigner.send({ + ledger: signer.ledger, + tx: signedTx[0].blob, + }); + await waitTxnConfirm(res.txId); + return res.txId; + } + + return { + XpNft: "", + algod, + getNonce: () => Chain.ALGORAND, + claimNft, + optInNft, + isOptIn, + async balance(address) { + const acc = await algod + .accountInformation(address) + .do() + .catch(() => undefined); + if (!acc) return new BigNumber(0); + + return new BigNumber(acc.amount); + }, + async preTransfer(sender, nft, fee) { + if (await isOptIn(sender.address, nft.native.nftId)) { + return undefined; + } + + const suggested = await algod.getTransactionParams().do(); + const callTx = algosdk.makeApplicationNoOpTxnFromObject({ + from: sender.address, + appIndex: args.sendNftAppId, + appArgs: [encoder.encode("optin_asset")], + foreignAssets: [nft.native.nftId], + suggestedParams: suggested, + }); + const feesTx = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + from: sender.address, + suggestedParams: suggested, + to: appAddr, + amount: BigInt(fee.toString()), + }); + + algosdk.assignGroupID([callTx, feesTx]); + const encodedTxns = [ + { txn: Base64.fromUint8Array(callTx.toByte()) }, + { txn: Base64.fromUint8Array(feesTx.toByte()) }, + ]; + const signedTxns = await sender.algoSigner.signTxn(encodedTxns); + const sendRes = await algod + .sendRawTransaction([ + Base64.toUint8Array(signedTxns[0].blob), + Base64.toUint8Array(signedTxns[1].blob), + ]) + .do(); + await waitTxnConfirm(sendRes.txId); + + return suggested; + }, + getFeeMargin() { + return args.feeMargin; + }, + transferNftToForeign: transferNft, + unfreezeWrappedNft: async (signer, to, nft, txFees, nonce) => { + const suggested = await algod.getTransactionParams().do(); + + const transferTx = + algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: signer.address, + to: appAddr, + amount: 1, + assetIndex: nft.native.nftId, + suggestedParams: suggested, + }); + const sTransferTx = await signer.algoSigner.signTxn([ + { txn: Base64.fromUint8Array(transferTx.toByte()) }, + ]); + const transferRes = await algod + .sendRawTransaction(Base64.toUint8Array(sTransferTx[0].blob)) + .do(); + await waitTxnConfirm(transferRes.txId as string); + + const paymentTxn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + from: signer.address, + suggestedParams: suggested, + to: appAddr, + amount: BigInt(txFees.toString()), + }); + const appArgs = [ + encoder.encode("withdraw_nft"), + encoder.encode(to), + new Uint8Array( + Buffer.from(new Uint32Array([parseInt(nonce)]).buffer).reverse() + ), + new Uint8Array(Buffer.from("")), + ]; + const tCallTx = algosdk.makeApplicationNoOpTxnFromObject({ + from: signer.address, + appIndex: args.sendNftAppId, + appArgs, + foreignAssets: [nft.native.nftId], + suggestedParams: suggested, + }); + algosdk.assignGroupID([tCallTx, paymentTxn]); + const encodedTxns = [ + { txn: Base64.fromUint8Array(tCallTx.toByte()) }, + { txn: Base64.fromUint8Array(paymentTxn.toByte()) }, + ]; + const signedTxns = await signer.algoSigner.signTxn(encodedTxns); + const sendRes = await algod + .sendRawTransaction([ + Base64.toUint8Array(signedTxns[0].blob), + Base64.toUint8Array(signedTxns[1].blob), + ]) + .do(); + await waitTxnConfirm(sendRes.txId); + + await args.notifier.notifyAlgorand(sendRes.txId); + + return sendRes.txId as string; + }, + estimateValidateTransferNft: () => Promise.resolve(MINT_NFT_COST), + estimateValidateUnfreezeNft: () => Promise.resolve(MINT_NFT_COST), + validateAddress: (adr) => Promise.resolve(algosdk.isValidAddress(adr)), + claimableNfts: async (txSocket: AlgorandSocketHelper, owner: string) => { + await txSocket.cleanNfts(owner); + const claims = await txSocket.claimNfts(owner); + + const res = await Promise.all( + claims.map(async (v) => { + const appId = parseInt(v.app_id); + const nftId = parseInt(v.nft_id); + const assetRes = await indexer + .lookupAssetByID(nftId) + .do() + .catch(() => undefined); + if (assetRes == undefined) return []; + const assetInfo = assetRes.asset; + + const bal = await indexer + .lookupAssetBalances(nftId) + .currencyGreaterThan(0) + .currencyLessThan(2) + .limit(1) + .do(); + if (bal.balances[0].address == owner || bal.balances[0].amount == 0) + return []; + + return [ + { + nftId, + appId, + uri: assetInfo.params.url as string, + name: (assetInfo.params.name as string) || "", + }, + ]; + }) + ); + + return res.flat(); + }, + walletConnectSigner( + connector: WalletConnect, + address: string + ): AlgoSignerH { + const signer: BrowserSigner = { + accounts(_) { + return Promise.resolve( + connector.accounts.map((s) => ({ address: s })) + ); + }, + async signTxn(txns) { + const req = formatJsonRpcRequest("algo_signTxn", [txns]); + const signed: Array = + await connector.sendCustomRequest(req); + const decoded = signed.map((s) => { + return { + blob: s ?? "", + } as SignedTxn; + }); + if (decoded.length != txns.length) { + throw Error("Couldn't sign all transactions!"); + } + + return decoded; + }, + send(info: { tx: string }): Promise { + return algod.sendRawTransaction(Base64.toUint8Array(info.tx)).do(); + }, + }; + + return { + algoSigner: signer, + address, + ledger: "any", + }; + }, + myAlgoSigner(myAlgo, address): AlgoSignerH { + const signer: BrowserSigner = { + async accounts(_) { + const accs = await myAlgo.connect(); + return accs; + }, + async signTxn(txns) { + const stxs = await myAlgo.signTransaction(txns.map(({ txn }) => txn)); + return stxs.map((tx) => ({ + txID: tx.txID, + blob: Base64.fromUint8Array(tx.blob), + })); + }, + send(info: { tx: string }): Promise { + return algod.sendRawTransaction(Base64.toUint8Array(info.tx)).do(); + }, + }; + + return { + algoSigner: signer, + address, + ledger: "any", + }; + }, + async getTokenURI(_, tokenId) { + if (tokenId) { + const res = await indexer.lookupAssetByID(+tokenId).do(); + if (res?.asset?.params) { + return res.asset.params.url as string; + } + } + return ""; + }, + }; +} diff --git a/src/helpers/aptos/bridge_client.ts b/src/helpers/aptos/bridge_client.ts new file mode 100644 index 000000000..68665086b --- /dev/null +++ b/src/helpers/aptos/bridge_client.ts @@ -0,0 +1,345 @@ +import { + AptosAccount, + AptosClient, + HexString, + MaybeHexString, + TransactionBuilderABI, +} from "aptos"; +import { + MAINNET_BRIDGE_ABIS, + STAGING_BRIDGE_ABIS, + TESTNET_BRIDGE_ABIS, +} from "./bridge_client_abis"; + +interface BridgeData { + action_cnt: string; + burning_nfts: { + handle: string; + }; + consumed_actions: { + handle: string; + }; + group_key: string; + paused: boolean; + frozen_nfts: { + handle: string; + }; + whitelist: { + handle: string; + }; +} + +export class BridgeClient { + private aptosClient: AptosClient; + private transactionBuilder: TransactionBuilderABI; + private address: string; + + constructor( + aptosClient: AptosClient, + address: string, + network: "mainnet" | "staging" | "testnet" + ) { + this.aptosClient = aptosClient; + let abi; + switch (network) { + case "mainnet": + abi = MAINNET_BRIDGE_ABIS; + break; + case "staging": + abi = STAGING_BRIDGE_ABIS; + break; + case "testnet": + abi = TESTNET_BRIDGE_ABIS; + break; + default: + throw new Error("Invalid network"); + } + this.transactionBuilder = new TransactionBuilderABI( + abi.map((abi) => new HexString(abi).toUint8Array()) + ); + this.address = address; + } + + async initialize( + account: AptosAccount, + groupKey: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::initialize`, + [], + [groupKey] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async pause( + account: AptosAccount, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::pause`, + [], + [actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async unpause( + account: AptosAccount, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::unpause`, + [], + [actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateWhitelist( + account: AptosAccount, + collectionCreator: HexString, + collectionName: string, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_whitelist`, + [], + [collectionCreator.toString(), collectionName, actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateBlacklist( + account: AptosAccount, + collectionCreator: HexString, + collectionName: string, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_blacklist`, + [], + [collectionCreator.toString(), collectionName, actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateWithdrawFees( + account: AptosAccount, + to: HexString, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_withdraw_fees`, + [], + [to.toString(), actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateTransferNft( + account: AptosAccount, + collection: string, + name: string, + description: string, + maximum: number | bigint, + uri: string, + royaltyPayeeAddress: HexString, + royaltyPointsDenominator: number | bigint, + royaltyPointsNumerator: number | bigint, + mutateSetting: boolean[], + to: HexString, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_transfer_nft`, + [], + [ + collection, + name, + description, + maximum, + uri, + royaltyPayeeAddress.toString(), + royaltyPointsDenominator.toString(), + royaltyPointsNumerator.toString(), + mutateSetting, + to.toString(), + actionId, + signature, + ] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async withdrawNft( + account: AptosAccount, + _bridgeAdmin: HexString, + collectionCreator: HexString, + collectionName: string, + tokenName: string, + propertyVersion: string, + price: number | bigint, + chainNonce: number | bigint, + to: string, + mintWith: string + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::withdraw_nft`, + [], + [ + collectionCreator.toString(), + collectionName, + tokenName, + propertyVersion, + price, + chainNonce, + to, + mintWith, + ] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateBurnNft( + account: AptosAccount, + collectionCreator: HexString, + collectionName: string, + tokenName: string, + propertyVersion: string, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_burn_nft`, + [], + [ + collectionCreator.toString(), + collectionName, + tokenName, + propertyVersion, + actionId, + signature, + ] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async freezeNft( + account: AptosAccount, + collectionCreator: HexString, + collectionName: string, + tokenName: string, + propertyVersion: number | bigint, + price: number | bigint, + chainNonce: number | bigint, + to: string, + mintWith: string + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::freeze_nft`, + [], + [ + collectionCreator.toString(), + collectionName, + tokenName, + propertyVersion, + price, + chainNonce, + to, + mintWith, + ] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async validateUnfreezeNft( + account: AptosAccount, + collectionCreator: HexString, + collectionName: string, + tokenName: string, + propertyVersion: string, + to: HexString, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::validate_unfreeze_nft`, + [], + [ + collectionCreator.toString(), + collectionName, + tokenName, + propertyVersion, + to.toString(), + actionId, + signature, + ] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async updateGroupKey( + account: AptosAccount, + groupKey: Uint8Array, + actionId: number | bigint, + signature: Uint8Array + ): Promise { + const payload = this.transactionBuilder.buildTransactionPayload( + `${this.getAddress()}::bridge::update_group_key`, + [], + [groupKey, actionId, signature] + ); + + return this.aptosClient.generateSignSubmitTransaction(account, payload); + } + + async getBridgeData() { + const resources = await this.aptosClient.getAccountResources( + this.getAddress() + ); + const accountResource = resources.find( + (r) => r.type == `${this.getAddress()}::bridge::Bridge` + ); + return accountResource?.data as BridgeData; + } + + getAddress() { + return this.address; + } + + async isWhitelist(collectionCreator: MaybeHexString, collectionName: string) { + const data = await this.getBridgeData(); + const { handle } = data.whitelist; + try { + const res = await this.aptosClient.getTableItem(handle, { + key_type: `${this.getAddress()}::bridge::CollectionId`, + value_type: "bool", + key: { + creator: collectionCreator.toString(), + name: collectionName, + }, + }); + return res; + } catch (e: any) { + return false; + } + } +} diff --git a/src/helpers/aptos/bridge_client_abis.ts b/src/helpers/aptos/bridge_client_abis.ts new file mode 100644 index 000000000..b37ad3758 --- /dev/null +++ b/src/helpers/aptos/bridge_client_abis.ts @@ -0,0 +1,67 @@ +export const MAINNET_BRIDGE_ABIS = [ + // ../build/aptos-bridge/abis/bridge/initialize.abi + "010a696e697469616c697a65f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d066272696467650000010967726f75705f6b65790601", + // ../build/aptos-bridge/abis/bridge/pause.abi + "01057061757365f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000209616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/unpause.abi + "0107756e7061757365f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000209616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/update_group_key.abi + "01107570646174655f67726f75705f6b6579f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d066272696467650000030d6e65775f67726f75705f6b6579060109616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_whitelist.abi + "011276616c69646174655f77686974656c697374f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_blacklist.abi + "011276616c69646174655f626c61636b6c697374f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_withdraw_fees.abi + "011676616c69646174655f77697468647261775f66656573f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000302746f0409616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_tranfer_nft.abi + "011576616c69646174655f7472616e736665725f6e6674f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000f0a636f6c6c656374696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700046e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000b6465736372697074696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700076d6178696d756d020375726907000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670015726f79616c74795f70617965655f61646472657373041a726f79616c74795f706f696e74735f64656e6f6d696e61746f720218726f79616c74795f706f696e74735f6e756d657261746f72020e6d75746174655f73657474696e6706000d70726f70657274795f6b6579730607000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000f70726f70657274795f76616c7565730606010e70726f70657274795f74797065730607000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670002746f0409616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/withdraw_nft.abi + "010c77697468647261775f6e6674f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + // ../build/aptos-bridge/abis/bridge/validate_burn_nft.abi + "011176616c69646174655f6275726e5f6e6674f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000612636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e0209616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/freeze_nft.abi + "010a667265657a655f6e6674f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + // ../build/aptos-bridge/abis/bridge/validate_unfreeze_nft.abi + "011576616c69646174655f756e667265657a655f6e6674f1528ec9c413e37f0ce63eb699fa6c7521b925ff4857b2c95e857e43078c916d0662726964676500000712636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e0202746f0409616374696f6e5f696403097369676e61747572650601", +]; + +export const TESTNET_BRIDGE_ABIS = [ + // ../build/aptos-bridge/abis/bridge/initialize.abi + "010a696e697469616c697a652b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d58066272696467650000010967726f75705f6b65790601", + // ../build/aptos-bridge/abis/bridge/pause.abi + "010570617573652b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000209616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/unpause.abi + "0107756e70617573652b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000209616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/update_group_key.abi + "01107570646174655f67726f75705f6b65792b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d58066272696467650000030d6e65775f67726f75705f6b6579060109616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_whitelist.abi + "011276616c69646174655f77686974656c6973742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_blacklist.abi + "011276616c69646174655f626c61636b6c6973742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_withdraw_fees.abi + "011676616c69646174655f77697468647261775f666565732b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000302746f0409616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/validate_tranfer_nft.abi + "011576616c69646174655f7472616e736665725f6e66742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000c0a636f6c6c656374696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700046e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000b6465736372697074696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700076d6178696d756d020375726907000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670015726f79616c74795f70617965655f61646472657373041a726f79616c74795f706f696e74735f64656e6f6d696e61746f720218726f79616c74795f706f696e74735f6e756d657261746f72020e6d75746174655f73657474696e67060002746f0409616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/withdraw_nft.abi + "010c77697468647261775f6e66742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + // ../build/aptos-bridge/abis/bridge/freeze_nft.abi + "010a667265657a655f6e66742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + // ../build/aptos-bridge/abis/bridge/validate_unfreeze_nft.abi + "011576616c69646174655f756e667265657a655f6e66742b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d580662726964676500000712636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e0202746f0409616374696f6e5f696403097369676e61747572650601", + // ../build/aptos-bridge/abis/bridge/create_collection.abi + "01116372656174655f636f6c6c656374696f6e2b9c2009290f6a291df678bca9b03aa55f909cbdbbcc215d4868f5bd8e5a7d58066272696467650000050f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670016636f6c6c656374696f6e5f6465736372697074696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000e636f6c6c656374696f6e5f75726907000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700076d6178696d756d020e6d75746174655f73657474696e670600", +]; + +export const STAGING_BRIDGE_ABIS = [ + "010a696e697469616c697a65813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec37066272696467650000010967726f75705f6b65790601", + "01057061757365813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000209616374696f6e5f696403097369676e61747572650601", + "0107756e7061757365813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000209616374696f6e5f696403097369676e61747572650601", + "01107570646174655f67726f75705f6b6579813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec37066272696467650000030d6e65775f67726f75705f6b6579060109616374696f6e5f696403097369676e61747572650601", + "011276616c69646174655f77686974656c697374813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + "011276616c69646174655f626c61636b6c697374813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000412636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670009616374696f6e5f696403097369676e61747572650601", + "011676616c69646174655f77697468647261775f66656573813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000302746f0409616374696f6e5f696403097369676e61747572650601", + "011576616c69646174655f7472616e736665725f6e6674813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000c0a636f6c6c656374696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700046e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000b6465736372697074696f6e07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700076d6178696d756d020375726907000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e670015726f79616c74795f70617965655f61646472657373041a726f79616c74795f706f696e74735f64656e6f6d696e61746f720218726f79616c74795f706f696e74735f6e756d657261746f72020e6d75746174655f73657474696e67060002746f0409616374696f6e5f696403097369676e61747572650601", + "010c77697468647261775f6e6674813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + "010a667265657a655f6e6674813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000812636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e02057072696365020b636861696e5f6e6f6e63650202746f07000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700096d696e745f7769746807000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e6700", + "011576616c69646174655f756e667265657a655f6e6674813d070ca33bf08223e957257c25cb66072fa8960b0af4810c2e78990126ec370662726964676500000712636f6c6c656374696f6e5f63726561746f72040f636f6c6c656374696f6e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67000a746f6b656e5f6e616d6507000000000000000000000000000000000000000000000000000000000000000106737472696e6706537472696e67001070726f70657274795f76657273696f6e0202746f0409616374696f6e5f696403097369676e61747572650601", +]; diff --git a/src/helpers/aptos/index.ts b/src/helpers/aptos/index.ts new file mode 100644 index 000000000..4f0d46c90 --- /dev/null +++ b/src/helpers/aptos/index.ts @@ -0,0 +1,233 @@ +import { + ChainNonceGet, + ClaimNFT, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + GetProvider, + MintNft, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, + BalanceCheck, +} from "../chain"; + +import { + AptosAccount, + AptosClient, + HexString, + CoinClient, + TokenClient, +} from "aptos"; + +import { Chain } from "../../consts"; +import BigNumber from "bignumber.js"; +import { BridgeClient } from "./bridge_client"; +import { EvNotifier } from "../../notifier"; + +export type AptosNFT = { + collection_creator: string; + collection_name: string; + token_name: string; + property_version: number; +}; + +/** + * @param collection name of the collection u already own. if u dont own any token, then set this as undefined + * @param name name of the NFT + * @param description description of the NFT + * @param uri The URI which the NFT points to + * @param createCollection set this as true if u set collection as undefined. it will create a new collection. + */ +export type AptosMintArgs = { + collection: string | undefined; + name: string; + description: string; + uri: string; + createCollection: boolean; +}; + +export type AptosClaimArgs = { + sender: HexString; + propertyVersion: number; + collectionName: string; + creator: string; + name: string; +}; + +export type AptosHelper = ChainNonceGet & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ValidateAddress & { + XpNft: string; + } & GetFeeMargins & + MintNft & + GetProvider & + ClaimNFT & + BalanceCheck & { + setPetraSigner(signer: any): void; + }; + +export type AptosParams = { + feeMargin: FeeMargins; + rpcUrl: string; + xpnft: string; + bridge: string; + notifier: EvNotifier; + network: "mainnet" | "staging" | "testnet"; +}; + +export async function aptosHelper({ + feeMargin, + rpcUrl, + xpnft, + bridge, + notifier, + network, +}: AptosParams): Promise { + const client = new AptosClient(rpcUrl); + + const bridgeClient = new BridgeClient(client, bridge, network); + const coinClient = new CoinClient(client); + + return { + getNonce() { + return Chain.APTOS; + }, + getFeeMargin() { + return feeMargin; + }, + setPetraSigner(signer: any) { + //imposter + client.generateSignSubmitTransaction = async function ( + _: AptosAccount, + payload: any + ) { + const trx = await signer.signAndSubmitTransaction(payload); + return trx.hash; + }; + }, + balance: async (address) => { + return new BigNumber((await coinClient.checkBalance(address)).toString()); + }, + async validateAddress(adr) { + try { + await client.getAccount(adr); + return true; + } catch (e) { + return false; + } + }, + XpNft: xpnft, + + async estimateValidateTransferNft(_to, _metadata, _mintWith) { + return new BigNumber(0); + }, + async estimateValidateUnfreezeNft(_to, _metadata, _mintWith) { + return new BigNumber(0); + }, + async transferNftToForeign( + sender, + chain_nonce, + to, + id, + txFees, + mintWith, + _gasLimit? + ) { + const receipt = await bridgeClient.freezeNft( + sender, + HexString.ensure(id.native.collection_creator), + id.native.collection_name, + id.native.token_name, + id.native.property_version, + BigInt(txFees.toString()), + chain_nonce, + to, + mintWith + ); + await new Promise((r) => setTimeout(r, 10000)); + await notifier.notifyAptos(receipt); + return receipt; + }, + getProvider() { + return client; + }, + async mintNft(owner, options) { + //AptosAccount.fromAptosAccountObject({""}) + const tc = new TokenClient(client); + if (options.createCollection) { + await tc.createCollection( + owner, + "UMT", + "UserNftMinter - Mint your NFTs Here To Test", + "https://example.com", + BigInt(2 ** 64) - BigInt(1) + ); + const response = await tc.createToken( + owner, + "UMT", + options.name, + options.description, + 1, + options.uri, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined + ); + return response; + } else { + const response = await tc.createToken( + owner, + options.collection!, + options.name, + options.description, + 1, + options.uri, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined + ); + return response; + } + }, + async claimNFT(signer, params) { + const tokenClient = new TokenClient(client); + const claim = await tokenClient.claimToken( + signer, + params.sender, + params.creator, + params.collectionName, + params.name, + params.propertyVersion + ); + return claim; + }, + async unfreezeWrappedNft(sender, to, id, txFees, nonce) { + const receipt = await bridgeClient.withdrawNft( + sender, + HexString.ensure(bridge), + HexString.ensure(id.native.collection_creator), + id.native.collection_name, + id.native.token_name, + id.native.property_version.toString(), + BigInt(txFees.toString()), + parseInt(nonce), + to, + id.native.collection_creator + ); + await new Promise((r) => setTimeout(r, 10000)); + await notifier.notifyAptos(receipt); + return receipt; + }, + }; +} diff --git a/src/helpers/bridge_pool.teal.ts b/src/helpers/bridge_pool.teal.ts new file mode 100644 index 000000000..2988ce9df --- /dev/null +++ b/src/helpers/bridge_pool.teal.ts @@ -0,0 +1,65 @@ +export const BRIDGE_TEAL = `#pragma version 5 +intcblock 1 6 3 +bytecblock TMPL_RECV_ADDR +txn TypeEnum +pushint 4 // axfer +== +txn AssetAmount +intc_0 // 1 +== +&& +txn AssetReceiver +bytec_0 // TMPL_RECV_ADDR +== +&& +bnz main_l6 +gtxn 0 TypeEnum +intc_1 // appl +== +gtxna 0 ApplicationArgs 0 +pushbytes 0x6372656174655f6e6674 // "create_nft" +== +&& +gtxna 0 Accounts 1 +bytec_0 // TMPL_RECV_ADDR +== +&& +gtxn 1 TypeEnum +intc_2 // acfg +== +&& +gtxn 1 ConfigAssetTotal +intc_0 // 1 +== +&& +gtxn 1 ConfigAssetDecimals +pushint 0 // 0 +== +&& +bnz main_l5 +gtxn 0 TypeEnum +intc_1 // appl +== +gtxna 0 ApplicationArgs 0 +pushbytes 0x77697468647261775f6e6674 // "withdraw_nft" +== +&& +gtxn 1 TypeEnum +intc_2 // acfg +== +&& +gtxn 1 ConfigAsset +gtxna 0 Assets 0 +== +&& +bnz main_l4 +err +main_l4: +intc_0 // 1 +return +main_l5: +intc_0 // 1 +return +main_l6: +intc_0 // 1 +return`; diff --git a/src/helpers/chain.ts b/src/helpers/chain.ts index 99608989f..2f2b95306 100644 --- a/src/helpers/chain.ts +++ b/src/helpers/chain.ts @@ -1,150 +1,216 @@ +import axios from "axios"; +import BigNumber from "bignumber.js"; +import { ethers } from "ethers"; +import { ChainNonce } from "../type-utils"; + /** - * Transfer Liquidity to a foregin chain, freezing the original liquidity - * - * @param sender Account which owns the liquidity on the native chain, able to sign transactions - * @param chain_nonce Nonce of the target chain - * @param to Address of the receiver on the foreign chain - * @param value Amount of liquidity to send - * - * @returns Transaction and the Identifier of this action to track the status + * NFT Info */ -export interface TransferForeign { - transferNativeToForeign( - sender: Signer, - chain_nonce: number, - to: ForeignAddr, - value: Balance - ): Promise<[Tx, EventIdent]>; -} +export type NftInfo = { + readonly uri: string; + readonly native: Raw; + readonly collectionIdent: string; + readonly tokenId?: any; + readonly originChain?: any; +}; /** - * Unfreeze native liquidity existing on a foreign chain(Send back Liquidity) - * - * @param sender Account which owns the wrapped liquidity on this chain, able to sign transactions - * @param chain_nonce Nonce of the original chain - * @param to Address of the receiver on the original chain - * @param value Amount of liquidity to unfreeze - * - * @returns Transaction and the Identifier of this action to track the status + * Action to perform before transfer/unfreeze (if any) */ -export interface UnfreezeForeign { - unfreezeWrapped(sender: Signer, chain_nonce: number, to: ForeignAddr, value: Balance): Promise<[Tx, EventIdent]>; +export interface PreTransfer { + preTransfer( + sender: Signer, + nft: NftInfo, + fee: BigNumber, + args?: ExtraArgs + ): Promise; + preUnfreeze( + sender: Signer, + nft: NftInfo, + fee: BigNumber, + args?: ExtraArgs + ): Promise; } /** * Transfer NFT to a foreign chain, freezing the original one - * + * * @param sender Account which owns the NFT on the native chain, able to sign transactions * @param chain_nonce Nonce of the target chain * @param to Address of the receiver on the foreign chain * @param id Information required to freeze this nft - * + * * @returns Transaction and the Identifier of this action to track the status */ -export interface TransferNftForeign { +export interface TransferNftForeign { transferNftToForeign( sender: Signer, chain_nonce: number, - to: ForeignAddr, - id: NftIdent - ): Promise<[Tx, EventIdent]>; + to: string, + id: NftInfo, + txFees: BigNumber, + mintWith: string, + gasLimit?: ethers.BigNumberish | undefined, + gasPrice?: ethers.BigNumberish | undefined + ): Promise; } /** * Unfreeze native NFT existing on a foreign chain(Send back NFT) * chain_nonce is automatically derived - * + * * @param sender Account which owns the wrapped NFT on this chain, able to sign transactions * @param to Address of the receiver on the original chain * @param id Information required to unfreeze this nft - * + * * @returns Transaction and the Identifier of this action to track the status */ -export interface UnfreezeForeignNft { +export interface UnfreezeForeignNft { unfreezeWrappedNft( sender: Signer, - to: ForeignAddr, - id: NftIdent - ): Promise<[Tx, EventIdent]>; + to: string, + id: NftInfo, + txFees: BigNumber, + nonce: string, + gasLimit: ethers.BigNumberish | undefined, + gasPrice: ethers.BigNumberish | undefined + ): Promise; } /** * Get the balance of an address on the chain */ -export interface BalanceCheck { - balance( - address: Addr - ): Promise; +export interface BalanceCheck { + balance(address: string): Promise; } /** - * Get the balance of a foreign token for an account in this chain + * Create a new NFT on this chain * - * @param address Address of the user - * @param chain_nonce nonce of the foreign chain + * @param options Arguments required to mint the nft */ -export interface WrappedBalanceCheck { - balanceWrapped( - address: Addr, - chain_nonce: number - ): Promise; +export interface MintNft { + mintNft(owner: Signer, options: Args): Promise; } -/** - * Get the balance of multiple foreign tokens for an account in this chain - * - * @param chain_nonces list of foreign tokens to fetch - * @returns Mapping of chain_nonce to balance - */ -export interface BatchWrappedBalanceCheck { - balanceWrappedBatch( - address: Addr, - chain_nonces: number[] - ): Promise>; +export interface ValidateAddress { + validateAddress(adr: string): Promise; } -/** - * Create a new NFT on this chain - * - * @param options Arguments required to mint the nft - */ -export interface MintNft { - mintNft( - owner: Signer, - options: Args - ): Promise +export interface EstimateTxFees { + estimateValidateTransferNft( + to: string, + metadata: NftInfo, + mintWith: string + ): Promise; + estimateContractDep?(toChain: any): Promise; + isNftWhitelisted?(nft: any, signer?: any): Promise; + estimateValidateUnfreezeNft( + to: string, + metadata: NftInfo, + mintWith: string + ): Promise; } -/** - * Get the list of NFTs for a given account - */ -export interface ListNft { - listNft( - owner: Addr - ): Promise> +export function ConcurrentSendError(): Error { + return new Error("concurrent_send"); } -/** - * Get the original data of a locked NFT (uri, name, etc) - */ -export interface GetLockedNft { - getLockedNft(ident: Ident): Promise; +export interface PreTransferRawTxn { + preTransferRawTxn( + id: NftInfo, + address: string, + value?: BigNumber + ): Promise; } -export type WrappedNft = { - chain_nonce: number, - data: Uint8Array +export interface ChainNonceGet { + getNonce(): ChainNonce; } -export interface DecodeWrappedNft { - decodeWrappedNft(raw_data: Data): WrappedNft; +export interface ExtractAction { + extractAction(txn: Txn): Promise; } -export interface DecodeRawNft { - decodeUrlFromRaw(data: Uint8Array): Promise; +export enum TransactionStatus { + PENDING = "pending", + SUCCESS = "success", + FAILURE = "failure", + UNKNOWN = "unknown", +} +export interface ExtractTxnStatus { + extractTxnStatus(txn: string): Promise; } +export interface GetTokenURI { + getTokenURI(contract: string, tokenId: string): Promise; +} -export function ConcurrentSendError(): Error { - return new Error("concurrent_send") +export interface TransferNftForeignBatch { + transferNftBatchToForeign( + sender: Signer, + chain_nonce: number, + to: string, + id: NftInfo[], + mintWith: string, + txFees: BigNumber + ): Promise; +} + +export interface UnfreezeForeignNftBatch { + unfreezeWrappedNftBatch( + sender: Signer, + chainNonce: number, + to: string, + nfts: NftInfo[], + txFees: BigNumber + ): Promise; +} + +export interface EstimateTxFeesBatch { + estimateValidateTransferNftBatch( + to: string, + metadatas: NftInfo[], + mintWith: string[] + ): Promise; + estimateValidateUnfreezeNftBatch( + to: string, + metadatas: NftInfo[] + ): Promise; +} + +export type WhitelistCheck = { + isNftWhitelisted(nft: NftInfo, signer?: Singer): Promise; +}; + +export interface GetProvider { + getProvider(): Provider; +} + +export async function isWrappedNft(nft: NftInfo) { + return ( + typeof (await axios.get(nft.uri).catch(() => undefined))?.data.wrapped !== + "undefined" + ); +} + +export interface IsContractAddress { + isContractAddress(address: string): Promise; +} + +export interface ParamsGetter { + getParams(): T; +} + +export interface FeeMargins { + min: number; + max: number; +} + +export interface GetFeeMargins { + getFeeMargin(): FeeMargins; +} + +export interface ClaimNFT { + claimNFT(signer: Signer, args: ClaimArgs): Promise; } diff --git a/src/helpers/dfinity/dfinity.ts b/src/helpers/dfinity/dfinity.ts new file mode 100644 index 000000000..ff048f264 --- /dev/null +++ b/src/helpers/dfinity/dfinity.ts @@ -0,0 +1,362 @@ +import { + Actor, + ActorSubclass, + HttpAgent, + Identity, + SubmitResponse, +} from "@dfinity/agent"; +import { IDL } from "@dfinity/candid"; +import { + decode, + encode, + Nat, + Nat32, + Nat8, + Opt, + PrincipalClass, + Record, + Text, + Tuple, + Vec, +} from "@dfinity/candid/lib/cjs/idl"; +import { AccountIdentifier, ICP, LedgerCanister } from "@dfinity/nns"; +import { Principal } from "@dfinity/principal"; +import BigNumber from "bignumber.js"; +import { Chain } from "../../consts"; +import { SignatureService } from "../../estimator"; +import { EvNotifier } from "../../notifier"; +import { ChainNonce } from "../../type-utils"; + +import { + BalanceCheck, + ChainNonceGet, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + MintNft, + NftInfo, + PreTransfer, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, +} from "../chain"; +import { idlFactory } from "./idl"; +import { _SERVICE } from "./minter.did"; + +export type DfinitySigner = Identity; + +export type DfinityNft = { + canisterId: string; + tokenId: string; +}; + +export type DfinityMintArgs = { + canisterId?: string; + uri: string; +}; + +const Metadata = IDL.Variant({ + fungible: IDL.Record({ + decimals: IDL.Nat8, + metadata: IDL.Opt(IDL.Vec(IDL.Nat8)), + name: IDL.Text, + symbol: IDL.Text, + }), + nonfungible: IDL.Record({ metadata: IDL.Opt(IDL.Vec(IDL.Nat8)) }), +}); +const CommonError = IDL.Variant({ + InvalidToken: IDL.Text, + Other: IDL.Text, +}); + +const Result_Bearer = IDL.Variant({ + ok: IDL.Text, + err: CommonError, +}); + +const User = IDL.Variant({ + principal: IDL.Principal, + address: IDL.Text, +}); +export type User = { principal: Principal } | { address: AccountIdentifier }; +export interface MintRequest { + to: User; + metadata: [] | [Array]; +} + +const MintRequest = IDL.Record({ + to: User, + metadata: IDL.Opt(IDL.Vec(IDL.Nat8)), +}); + +const ApproveRequest = Record({ + token: Text, + subaccount: Opt(Vec(Nat8)), + allowance: Nat, + spender: new PrincipalClass(), +}); + +export type DfinityHelper = ChainNonceGet & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ValidateAddress & { XpNft: string } & Pick< + PreTransfer, + "preTransfer" + > & + BalanceCheck & + GetFeeMargins & + MintNft & { + nftList(owner: string, contract: string): Promise[]>; + }; + +export type DfinityParams = { + agent: HttpAgent; + bridgeContract: Principal; + xpnftId: Principal; + notifier: EvNotifier; + feeMargin: FeeMargins; + umt: Principal; + readonly signatureSvc: SignatureService; +}; + +export async function dfinityHelper( + args: DfinityParams +): Promise { + const ledger = LedgerCanister.create({ agent: args.agent }); + + const minter: ActorSubclass<_SERVICE> = Actor.createActor(idlFactory, { + agent: args.agent, + canisterId: args.bridgeContract, + }); + + async function transferTxFee(amt: BigNumber): Promise { + return await ledger.transfer({ + to: AccountIdentifier.fromPrincipal({ + principal: args.bridgeContract, + }), + amount: ICP.fromE8s(BigInt(amt.toString())), + }); + } + const to32bits = (num: number) => { + let b = new ArrayBuffer(4); + new DataView(b).setUint32(0, num); + 1 << 5; + return Array.from(new Uint8Array(b)); + }; + + const tokenIdentifier = (principal: string, index: number) => { + const padding = Buffer.from("\x0Atid"); + const array = new Uint8Array([ + ...padding, + ...Principal.fromText(principal).toUint8Array(), + ...to32bits(index), + ]); + return Principal.fromUint8Array(array).toText(); + }; + + // async function waitActionId(requestId: RequestId) { + // const pollStrat = polling.defaultStrategy(); + // const resp = await polling.pollForResponse( + // args.agent, + // args.bridgeContract, + // requestId, + // pollStrat + // ); + + // return decode([Nat], resp)[0].toString() as string; + // } + + return { + XpNft: args.xpnftId.toString(), + getNonce: () => Chain.DFINITY, + estimateValidateTransferNft: async () => new BigNumber(0), // TODO + estimateValidateUnfreezeNft: async () => new BigNumber(0), // TODO + async validateAddress(adr) { + try { + Principal.fromText(adr); + return true; + } catch { + return false; + } + }, + async transferNftToForeign(sender, chain_nonce, to, id, txFees, mintWith) { + args.agent.replaceIdentity(sender); + const sig = await args.signatureSvc.getSignatureDfinity( + Chain.DFINITY, + chain_nonce as ChainNonce, + to, + 1 + ); + + const txFeeBlock = await transferTxFee(txFees); + + const actionId = await minter.freeze_nft( + txFeeBlock, + Principal.fromText(id.native.canisterId), + BigInt(id.native.tokenId), + BigInt(chain_nonce), + to, + mintWith, + [...Buffer.from(sig.signature, "hex")] + ); + + await args.notifier.notifyDfinity(actionId.toString()); + + return "NO TX RESP YET"; + }, + async mintNft(owner, options) { + const canister = Principal.fromText( + options.canisterId ? options.canisterId : args.umt.toText() + ); + let mint = await args.agent.call(canister, { + methodName: "mintNFT", + arg: encode( + [MintRequest], + [ + { + metadata: [[...Buffer.from(options.uri)]], + to: { + principal: owner.getPrincipal(), + }, + } as MintRequest, + ] + ), + }); + return mint; + }, + async unfreezeWrappedNft(sender, to, id, txFees, nonce) { + args.agent.replaceIdentity(sender); + + const sig = await args.signatureSvc.getSignatureDfinity( + Chain.DFINITY, + parseInt(nonce) as ChainNonce, + to, + 1 + ); + + const txFeeBlock = await transferTxFee(txFees); + + const actionId = await minter.withdraw_nft( + txFeeBlock, + Principal.fromText(id.native.canisterId), + BigInt(id.native.tokenId), + BigInt(nonce), + to, + [...Buffer.from(sig.signature, "hex")] + ); + + await args.notifier.notifyDfinity(actionId.toString()); + + return "NO TX RESP YET"; + }, + + /// owner = principal of owner + async nftList(owner, contract) { + let aid = AccountIdentifier.fromPrincipal({ + principal: Principal.fromText(owner), + }); + let tokens: NftInfo[] = []; + const response = await args.agent.query(contract, { + methodName: "getTokens", + arg: encode([], []), + }); + if ("reply" in response) { + let decoded = decode( + [IDL.Vec(IDL.Tuple(Nat32, Metadata))], + response.reply.arg + )[0] as any[]; + await Promise.all( + decoded.map(async (e) => { + let [tokenId, metadata]: [number, any] = e; + let tid = tokenIdentifier(contract, tokenId); + const ownerQuery = await args.agent.query(contract, { + methodName: "bearer", + arg: encode([Text], [tid]), + }); + if ("reply" in ownerQuery) { + const response = decode( + [Result_Bearer], + ownerQuery.reply.arg + )[0] as Record; + if ("ok" in response) { + if (response.ok === aid.toHex()) { + tokens.push({ + collectionIdent: contract, + native: { + canisterId: contract, + tokenId: tokenId.toString(), + }, + uri: Buffer.from( + metadata["nonfungible"]["metadata"][0] ?? [] + ).toString("utf-8"), + }); + } + } + } + }) + ); + } + return tokens; + }, + async preTransfer(sender, nft) { + args.agent.replaceIdentity(sender); + + const tid = tokenIdentifier( + nft.collectionIdent, + Number(nft.native.tokenId) + ); + + const nftContract = Principal.fromText(nft.native.canisterId); + const approvedQuery = await args.agent.query(nftContract, { + methodName: "getAllowances", + arg: encode([Text], [tid]), + }); + + if ("reply" in approvedQuery) { + let decoded: Array<[number, Principal]> = decode( + [Vec(Tuple(Nat32, new PrincipalClass()))], + approvedQuery.reply.arg + )[0] as any; + for (const item of decoded) { + if (item[0] === Number(nft.native.tokenId)) { + if (item[1].toText() === args.bridgeContract.toText()) { + return undefined; + } + } + } + } + + const approveCall = await args.agent.call(nftContract, { + methodName: "approve", + arg: encode( + [ApproveRequest], + [ + { + token: tid, + allowance: BigInt(1), + spender: args.bridgeContract, + subaccount: [], + }, + ] + ), + }); + + return Buffer.from(approveCall.requestId).toString("hex"); + }, + getFeeMargin() { + return args.feeMargin; + }, + async balance(address) { + const bal = await ledger.accountBalance({ + accountIdentifier: AccountIdentifier.fromPrincipal({ + principal: Principal.fromText(address), + }), + }); + + const e8s = bal.toE8s().toString(); + + return new BigNumber(e8s); + }, + }; +} diff --git a/src/helpers/dfinity/idl.ts b/src/helpers/dfinity/idl.ts new file mode 100644 index 000000000..40d1af408 --- /dev/null +++ b/src/helpers/dfinity/idl.ts @@ -0,0 +1,192 @@ +export const idlFactory = ({ IDL }: any) => { + const ValidateWhitelistDip721 = IDL.Record({ + dip_contract: IDL.Principal, + }); + const ValidateCleanLogs = IDL.Record({ action_id: IDL.Nat }); + const ValidateTransferNft = IDL.Record({ + to: IDL.Principal, + mint_with: IDL.Principal, + token_url: IDL.Text, + }); + const ValidateTransferNftBatch = IDL.Record({ + to: IDL.Principal, + mint_with: IDL.Vec(IDL.Principal), + token_urls: IDL.Vec(IDL.Text), + }); + const ValidateUnfreezeNft = IDL.Record({ + to: IDL.Principal, + dip_contract: IDL.Principal, + token_id: IDL.Nat, + }); + const ValidateUnfreezeNftBatch = IDL.Record({ + to: IDL.Principal, + dip_contracts: IDL.Vec(IDL.Principal), + token_ids: IDL.Vec(IDL.Nat), + }); + const Config = IDL.Record({ + event_cnt: IDL.Nat, + fee_public_key: IDL.Vec(IDL.Nat8), + chain_nonce: IDL.Nat64, + group_key: IDL.Vec(IDL.Nat8), + paused: IDL.Bool, + }); + const BridgeEventCtx = IDL.Record({ + to: IDL.Text, + action_id: IDL.Nat, + tx_fee: IDL.Nat64, + chain_nonce: IDL.Nat64, + }); + const UnfreezeNftBatch = IDL.Record({ + uris: IDL.Vec(IDL.Text), + token_ids: IDL.Vec(IDL.Nat), + burner: IDL.Principal, + }); + const UnfreezeNft = IDL.Record({ + uri: IDL.Text, + token_id: IDL.Nat, + burner: IDL.Principal, + }); + const TransferNft = IDL.Record({ + dip721_contract: IDL.Principal, + token_id: IDL.Nat, + mint_with: IDL.Text, + token_data: IDL.Text, + }); + const TransferNftBatch = IDL.Record({ + dip721_contract: IDL.Principal, + token_datas: IDL.Vec(IDL.Text), + mint_with: IDL.Text, + token_ids: IDL.Vec(IDL.Nat), + }); + const BridgeEvent = IDL.Variant({ + UnfreezeNftBatch: UnfreezeNftBatch, + UnfreezeNft: UnfreezeNft, + TransferNft: TransferNft, + TransferNftBatch: TransferNftBatch, + }); + const ValidateSetGroupKey = IDL.Record({ group_key: IDL.Vec(IDL.Nat8) }); + const ValidateSetPause = IDL.Record({ pause: IDL.Bool }); + const ValidateWithdrawFees = IDL.Record({ to: IDL.Principal }); + return IDL.Service({ + add_whitelist: IDL.Func( + [IDL.Nat, ValidateWhitelistDip721, IDL.Vec(IDL.Nat8)], + [], + [] + ), + clean_logs: IDL.Func( + [IDL.Nat, ValidateCleanLogs, IDL.Vec(IDL.Nat8)], + [], + [] + ), + encode_transfer_tx: IDL.Func( + [IDL.Nat8, IDL.Nat8, IDL.Text, IDL.Nat], + [IDL.Vec(IDL.Nat8)], + ["query"] + ), + encode_validate_transfer_nft: IDL.Func( + [IDL.Nat, ValidateTransferNft], + [IDL.Vec(IDL.Nat8)], + ["query"] + ), + encode_validate_transfer_nft_batch: IDL.Func( + [IDL.Nat, ValidateTransferNftBatch], + [IDL.Vec(IDL.Nat8)], + ["query"] + ), + encode_validate_unfreeze_nft: IDL.Func( + [IDL.Nat, ValidateUnfreezeNft], + [IDL.Vec(IDL.Nat8)], + ["query"] + ), + encode_validate_unfreeze_nft_batch: IDL.Func( + [IDL.Nat, ValidateUnfreezeNftBatch], + [IDL.Vec(IDL.Nat8)], + ["query"] + ), + freeze_nft: IDL.Func( + [ + IDL.Nat64, + IDL.Principal, + IDL.Nat, + IDL.Nat64, + IDL.Text, + IDL.Text, + IDL.Vec(IDL.Nat8), + ], + [IDL.Nat], + [] + ), + freeze_nft_batch: IDL.Func( + [ + IDL.Nat64, + IDL.Principal, + IDL.Vec(IDL.Nat), + IDL.Nat64, + IDL.Text, + IDL.Text, + ], + [IDL.Nat], + [] + ), + get_config: IDL.Func([], [Config], ["query"]), + get_event: IDL.Func( + [IDL.Nat], + [IDL.Opt(IDL.Tuple(BridgeEventCtx, BridgeEvent))], + ["query"] + ), + is_whitelisted: IDL.Func([IDL.Principal], [IDL.Bool], ["query"]), + set_fee_group_key: IDL.Func( + [IDL.Nat, ValidateSetGroupKey, IDL.Vec(IDL.Nat8)], + [], + [] + ), + set_group_key: IDL.Func( + [IDL.Nat, ValidateSetGroupKey, IDL.Vec(IDL.Nat8)], + [], + [] + ), + set_pause: IDL.Func([IDL.Nat, ValidateSetPause, IDL.Vec(IDL.Nat8)], [], []), + validate_transfer_nft: IDL.Func( + [IDL.Nat, ValidateTransferNft, IDL.Vec(IDL.Nat8)], + [IDL.Nat32], + [] + ), + validate_transfer_nft_batch: IDL.Func( + [IDL.Nat, ValidateTransferNftBatch, IDL.Vec(IDL.Nat8)], + [], + [] + ), + validate_unfreeze_nft: IDL.Func( + [IDL.Nat, ValidateUnfreezeNft, IDL.Vec(IDL.Nat8)], + [], + [] + ), + validate_unfreeze_nft_batch: IDL.Func( + [IDL.Nat, ValidateUnfreezeNftBatch, IDL.Vec(IDL.Nat8)], + [], + [] + ), + withdraw_fees: IDL.Func( + [IDL.Nat, ValidateWithdrawFees, IDL.Vec(IDL.Nat8)], + [IDL.Nat64], + [] + ), + withdraw_nft: IDL.Func( + [ + IDL.Nat64, + IDL.Principal, + IDL.Nat, + IDL.Nat64, + IDL.Text, + IDL.Vec(IDL.Nat8), + ], + [IDL.Nat], + [] + ), + withdraw_nft_batch: IDL.Func( + [IDL.Nat64, IDL.Principal, IDL.Vec(IDL.Nat), IDL.Nat64, IDL.Text], + [IDL.Nat], + [] + ), + }); +}; diff --git a/src/helpers/dfinity/minter.did.d.ts b/src/helpers/dfinity/minter.did.d.ts new file mode 100644 index 000000000..c05e750e8 --- /dev/null +++ b/src/helpers/dfinity/minter.did.d.ts @@ -0,0 +1,156 @@ +import type { Principal } from "@dfinity/principal"; +import type { ActorMethod } from "@dfinity/agent"; + +export type BridgeEvent = + | { UnfreezeNftBatch: UnfreezeNftBatch } + | { UnfreezeNft: UnfreezeNft } + | { TransferNft: TransferNft } + | { TransferNftBatch: TransferNftBatch }; +export interface BridgeEventCtx { + to: string; + action_id: bigint; + tx_fee: bigint; + chain_nonce: bigint; +} +export interface Config { + event_cnt: bigint; + fee_public_key: Array; + chain_nonce: bigint; + group_key: Array; + paused: boolean; +} +export interface TransferNft { + dip721_contract: Principal; + token_id: bigint; + mint_with: string; + token_data: string; +} +export interface TransferNftBatch { + dip721_contract: Principal; + token_datas: Array; + mint_with: string; + token_ids: Array; +} +export interface UnfreezeNft { + uri: string; + token_id: bigint; + burner: Principal; +} +export interface UnfreezeNftBatch { + uris: Array; + token_ids: Array; + burner: Principal; +} +export interface ValidateCleanLogs { + action_id: bigint; +} +export interface ValidateSetGroupKey { + group_key: Array; +} +export interface ValidateSetPause { + pause: boolean; +} +export interface ValidateTransferNft { + to: Principal; + mint_with: Principal; + token_url: string; +} +export interface ValidateTransferNftBatch { + to: Principal; + mint_with: Array; + token_urls: Array; +} +export interface ValidateUnfreezeNft { + to: Principal; + dip_contract: Principal; + token_id: bigint; +} +export interface ValidateUnfreezeNftBatch { + to: Principal; + dip_contracts: Array; + token_ids: Array; +} +export interface ValidateWhitelistDip721 { + dip_contract: Principal; +} +export interface ValidateWithdrawFees { + to: Principal; +} +export interface _SERVICE { + add_whitelist: ActorMethod< + [bigint, ValidateWhitelistDip721, Array], + undefined + >; + clean_logs: ActorMethod< + [bigint, ValidateCleanLogs, Array], + undefined + >; + encode_transfer_tx: ActorMethod< + [number, number, string, bigint], + Array + >; + encode_validate_transfer_nft: ActorMethod< + [bigint, ValidateTransferNft], + Array + >; + encode_validate_transfer_nft_batch: ActorMethod< + [bigint, ValidateTransferNftBatch], + Array + >; + encode_validate_unfreeze_nft: ActorMethod< + [bigint, ValidateUnfreezeNft], + Array + >; + encode_validate_unfreeze_nft_batch: ActorMethod< + [bigint, ValidateUnfreezeNftBatch], + Array + >; + freeze_nft: ActorMethod< + [bigint, Principal, bigint, bigint, string, string, Array], + bigint + >; + freeze_nft_batch: ActorMethod< + [bigint, Principal, Array, bigint, string, string], + bigint + >; + get_config: ActorMethod<[], Config>; + get_event: ActorMethod<[bigint], [] | [[BridgeEventCtx, BridgeEvent]]>; + is_whitelisted: ActorMethod<[Principal], boolean>; + set_fee_group_key: ActorMethod< + [bigint, ValidateSetGroupKey, Array], + undefined + >; + set_group_key: ActorMethod< + [bigint, ValidateSetGroupKey, Array], + undefined + >; + set_pause: ActorMethod<[bigint, ValidateSetPause, Array], undefined>; + validate_transfer_nft: ActorMethod< + [bigint, ValidateTransferNft, Array], + number + >; + validate_transfer_nft_batch: ActorMethod< + [bigint, ValidateTransferNftBatch, Array], + undefined + >; + validate_unfreeze_nft: ActorMethod< + [bigint, ValidateUnfreezeNft, Array], + undefined + >; + validate_unfreeze_nft_batch: ActorMethod< + [bigint, ValidateUnfreezeNftBatch, Array], + undefined + >; + withdraw_fees: ActorMethod< + [bigint, ValidateWithdrawFees, Array], + bigint + >; + withdraw_nft: ActorMethod< + [bigint, Principal, bigint, bigint, string, Array], + bigint + >; + withdraw_nft_batch: ActorMethod< + [bigint, Principal, Array, bigint, string], + bigint + >; +} diff --git a/src/helpers/elrond.ts b/src/helpers/elrond.ts index 6bdb248b6..1583a7eaa 100644 --- a/src/helpers/elrond.ts +++ b/src/helpers/elrond.ts @@ -12,6 +12,8 @@ import { BigUIntValue, BytesValue, ContractFunction, + Egld, + ExtensionProvider, GasLimit, ISigner, NetworkConfig, @@ -21,59 +23,75 @@ import { TransactionHash, TransactionPayload, U64Value, + UserSigner, + WalletConnectProvider, + Nonce, } from "@elrondnetwork/erdjs"; +import { Transaction as XTRX, Address as XADDR } from "@multiversx/sdk-core"; + import axios from "axios"; import BigNumber from "bignumber.js"; import { BalanceCheck, - BatchWrappedBalanceCheck, ConcurrentSendError, - DecodeRawNft, - DecodeWrappedNft, - GetLockedNft, - ListNft, MintNft, - TransferForeign, TransferNftForeign, - UnfreezeForeign, UnfreezeForeignNft, - WrappedNft, + TransactionStatus, + TransferNftForeignBatch, + UnfreezeForeignNftBatch, + EstimateTxFeesBatch, + GetFeeMargins, + FeeMargins, + IsContractAddress, + GetTokenURI, } from "./chain"; +import { + Chain, + ChainNonceGet, + EstimateTxFees, + ExtractAction, + ExtractTxnStatus, + NftInfo, + PreTransfer, + PreTransferRawTxn, + ValidateAddress, +} from ".."; +import { EvNotifier } from "../notifier"; import { Base64 } from "js-base64"; +type ElrondSigner = ISigner | ExtensionProvider | WalletConnectProvider; + type EasyBalance = string | number | BigNumber; -const ESDT_ISSUE_ADDR = new Address("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"); +const ESDT_ISSUE_ADDR = new Address( + "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u" +); const ESDT_ISSUE_COST = "50000000000000000"; -/** - * Information required to perform NFT transfers in this chain - */ -export type NftInfo = { - token: string; - nonce: EasyBalance; -}; +const NFT_TRANSFER_COST = new BigNumber(350000000); +const NFT_UNFREEZE_COST = new BigNumber(350000000); type ContractRes = { readonly [idx: string]: number | string; -} +}; /** * Information associated with an ESDT Token */ export type EsdtTokenInfo = { - readonly balance: string; + readonly balance: 1 | string; readonly tokenIdentifier: string; -} +}; type BEsdtNftInfo = { - readonly attributes?: string; + readonly attributes?: string[]; readonly creator: string; readonly name: string; readonly nonce: number; readonly royalties: string; readonly uris: string[]; -} +}; type MaybeEsdtNftInfo = EsdtTokenInfo & (BEsdtNftInfo | undefined); @@ -82,299 +100,347 @@ type MaybeEsdtNftInfo = EsdtTokenInfo & (BEsdtNftInfo | undefined); */ export type EsdtNftInfo = EsdtTokenInfo & BEsdtNftInfo; -function isEsdtNftInfo(maybe: MaybeEsdtNftInfo): maybe is EsdtNftInfo { - return maybe.creator != undefined && maybe.balance == "1"; -} - /** * arguments required to issue an NFT */ export type NftIssueArgs = { - readonly identifier: string, - readonly quantity: number | undefined, - readonly name: string, - readonly royalties: number | undefined, - readonly hash: string | undefined, - readonly attrs: string | undefined, - readonly uris: Array -} + readonly identifier: string; + readonly uris: Array; + readonly name: string; + readonly quantity?: number; + readonly royalties?: number; + readonly hash?: string; + readonly attrs?: string; +}; /** * Utility for issuing ESDT which supports NFT minting */ export interface IssueESDTNFT { - /** - * Unsigned Transaction for [[issueESDTNft]] - */ - unsignedIssueESDTNft( - name: string, - ticker: string, - canFreeze: boolean | undefined, - canWipe: boolean | undefined, - canTransferNFTCreateRole: boolean | undefined - ): Transaction; - /** * Issue a new ESDT supporting NFTs - * + * * @param sender Owner of this ESDT * @param name Name of the ESDT * @param ticker Ticker of the ESDT * @param canFreeze Wheteher this ESDT can be frozen * @param canWipe Whether this ESDT can be wiped * @param canTransferNFTCreateRole Whether the NFT Creation role can be transferred + * + * @returns ticker of the esdt */ issueESDTNft( - sender: ISigner, + sender: ElrondSigner, name: string, ticker: string, canFreeze: boolean | undefined, canWipe: boolean | undefined, canTransferNFTCreateRole: boolean | undefined - ): Promise; -}; + ): Promise; +} /** * Possible roles for an ESDT - * + * * ESDTRoleNFTCreate: Allow creating NFTs * ESDTRoleNFTBurn: Allow burning NFTs * ESDTRoleNFTAddQuanitity: Allowing minting >1 NFTs (SFT) */ -export type ESDTRole = "ESDTRoleNFTCreate" | "ESDTRoleNFTBurn" | "ESDTRoleNFTAddQuantity"; +export type ESDTRole = "ESDTRoleNFTCreate" | "ESDTRoleNFTBurn"; /** * Utility for setting ESDT roles */ export interface SetESDTRoles { /** - * Unsigned Transaction for [[setESDTRole]] - */ - unsignedSetESDTRoles( - token: string, - target: Address, - roles: [ESDTRole] - ): Transaction; - - /** - * + * * Set the roles for a given account for an esdt - * + * * @param sender Target account * @param token ESDT Identifier * @param roles Roles to set */ - setESDTRole( - sender: ISigner, - token: string, - roles: [ESDTRole] - ): Promise; + setESDTRole( + sender: ElrondSigner, + token: string, + target: Address, + roles: ESDTRole[] + ): Promise; + transferESDTOwnership( + sender: ElrondSigner, + token: string, + target: Address + ): Promise; } -/** - * Identifier for tracking a given action - */ -type EventIdent = number; +export interface ElrondRawUnsignedTxn { + readonly nonce: number; + readonly value: string; + readonly receiver: string; + readonly sender: string; + readonly gasPrice: number; + readonly gasLimit: number; + readonly data?: string; + readonly chainID: string; + readonly version: number; + readonly options?: number; + readonly signature?: string; +} /** * Traits implemented by this module */ -export type ElrondHelper = BalanceCheck & - BatchWrappedBalanceCheck & - TransferForeign & - UnfreezeForeign & - TransferNftForeign & - UnfreezeForeignNft & +export type ElrondHelper = BalanceCheck & + TransferNftForeign & + UnfreezeForeignNft & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & IssueESDTNFT & - MintNft & - ListNft & - GetLockedNft & - DecodeWrappedNft & - DecodeRawNft & { - /** - * Unsigned Transaction for [[TransferForeign]] - */ - unsignedTransferTxn(chain_nonce: number, to: string, value: EasyBalance): Transaction; - /** - * Unsigned Transaction for [[UnfreezeForeign]] - */ - unsignedUnfreezeTxn(chain_nonce: number, address: Address, to: string, value: EasyBalance): Transaction; - /** - * Unsigned Transaction for [[TransferNftForeign]] - */ - unsignedTransferNftTxn(chain_nonce: number, address: Address, to: string, info: NftInfo): Transaction; - /** - * Unsigned Transaction for [[UnfreezeForeignNft]] - */ - unsignedUnfreezeNftTxn(address: Address, to: string, id: number): Transaction; - /** - * Unsigned transaction for Minting an NFT - */ - unsignedMintNftTxn(owner: Address, args: NftIssueArgs): Transaction; - /** - * Raw result of a transaction - * - * @param tx_hash Hash of the transaction - */ - rawTxnResult(tx_hash: TransactionHash): Promise; // TODO: Typed transaction result - }; + MintNft & { + mintableEsdts(address: Address): Promise; + } & ChainNonceGet & + ValidateAddress & + ExtractAction & + PreTransfer & + EstimateTxFees & + EstimateTxFeesBatch & + PreTransferRawTxn & + ExtractTxnStatus & + SetESDTRoles & { XpNft: string } & GetFeeMargins & { + wegldBalance(address: string): Promise; + unwrapWegld(sender: ElrondSigner, amt: BigNumber): Promise; + } & IsContractAddress & + GetTokenURI; /** * Create an object implementing cross chain utilities for elrond - * + * * @param node_uri URI of the elrond node * @param minter_address Address of the minter smart contract * @param middleware_uri REST API of elrond-event-middleware - * @param esdt Identifier of the ESDT Wrapper * @param esdt_nft Identifier of the ESDT NFT Wrapper */ -export const elrondHelperFactory: ( - node_uri: string, - minter_address: string, - esdt: string, - esdt_nft: string -) => Promise = async ( - node_uri: string, - minter_address: string, - esdt: string, - esdt_nft: string -) => { - const provider = new ProxyProvider(node_uri); +export interface ElrondParams { + node_uri: string; + notifier: EvNotifier; + minter_address: string; + esdt_swap_address: string; + esdt_nft: string; + esdt_swap: string; + feeMargin: FeeMargins; +} + +export async function elrondHelperFactory( + elrondParams: ElrondParams +): Promise { + const provider = new ProxyProvider(elrondParams.node_uri); await NetworkConfig.getDefault().sync(provider); - const mintContract = new Address(minter_address); + const mintContract = new Address(elrondParams.minter_address); + const swapContract = new Address(elrondParams.esdt_swap_address); const providerRest = axios.create({ - baseURL: node_uri + baseURL: elrondParams.node_uri, }); - const esdtHex = Buffer.from(esdt, "utf-8"); - const esdtNftHex = Buffer.from(esdt_nft, "utf-8"); - const decoder = new TextDecoder(); + const esdtNftHex = Buffer.from(elrondParams.esdt_nft, "utf-8"); + const esdtSwaphex = Buffer.from(elrondParams.esdt_swap, "utf-8"); + const networkConfig = await provider.getNetworkConfig(); + const gasPriceModif = + networkConfig.MinGasPrice.valueOf() * + networkConfig.GasPriceModifier.valueOf(); + + async function notifyValidator( + txn: Transaction, + sender: string, + uri: string[], + action_id: string | undefined + ) { + await elrondParams.notifier.notifyElrond( + txn.getHash().toString(), + sender, + uri, + action_id + ); + } - const syncAccount = async (signer: ISigner) => { - const account = new Account(signer.getAddress()); + const syncAccount = async (signer: ElrondSigner) => { + const account = new Account(await getAddress(signer)); await account.sync(provider); return account; }; - const signAndSend = async (signer: ISigner, tx: Transaction) => { + const signAndSend = async (signer: ElrondSigner, tx: Transaction) => { const acc = await syncAccount(signer); - tx.setNonce(acc.nonce); - await signer.sign(tx); - - try { - await tx.send(provider); - } catch (e) { - if (e.message.includes("lowerNonceInTx")) { - throw ConcurrentSendError(); - } else { - throw e; - } - } - return tx; - } + let stx: Transaction; + + if (typeof (signer as any).walletConnector !== "undefined") { + const wcSigenr = signer as any; + const address = (await signer.getAddress()) as string; + const res = await ( + await axios(`https://gateway.multiversx.com/address/${address}/nonce`) + ).data; + + const payload = new XTRX({ + chainID: wcSigenr.chainId, + sender: new XADDR(address), + data: tx.getData(), + gasLimit: tx.getGasLimit(), + receiver: tx.getReceiver(), + value: tx.getValue(), + nonce: new Nonce(res.data.nonce), + }); + const txs = await wcSigenr.signTransactions([payload]); + + stx = txs[0]; + await provider.sendTransaction(stx); + return stx; + } else if (signer instanceof ExtensionProvider) { + stx = await signer.signTransaction(tx); + } else if (signer instanceof UserSigner) { + await signer.sign(tx); + stx = tx; + } else { + //@ts-ignore + stx = await signer.signTransaction(tx); + } + try { + await stx.send(provider); + } catch (e: any) { + if (e.message.includes("lowerNonceInTx")) { + throw ConcurrentSendError(); + } else { + throw e; + } + } + return stx; + }; const transactionResult = async (tx_hash: TransactionHash) => { const uri = `/transaction/${tx_hash.toString()}?withResults=true`; - let tries = 0; + let tries = 0; while (tries < 10) { - tries += 1; - let err; - // TODO: type safety - const res = await providerRest.get(uri).catch(e => err = e); - if (err) { - await new Promise(r => setTimeout(r, 3000)) - continue; - } + tries += 1; + let err; + // TODO: type safety + const res = await providerRest.get(uri).catch((e) => (err = e)); + if (err) { + await new Promise((r) => setTimeout(r, 3000)); + continue; + } const data = res.data; if (data["code"] != "successful") { - throw Error("failed to execute txn") + throw Error("failed to execute txn"); } - const tx_info = data["data"]["transaction"] + const tx_info = data["data"]["transaction"]; if (tx_info["status"] == "pending") { - await new Promise(r => setTimeout(r, 5000)); + await new Promise((r) => setTimeout(r, 5000)); continue; } if (tx_info["status"] != "success") { - throw Error("failed to execute txn") + throw Error("failed to execute txn"); } return tx_info; } - throw Error(`failed to query transaction exceeded 10 retries ${tx_hash}`); - } + throw Error(`failed to query transaction exceeded 10 retries ${tx_hash}`); + }; - const unsignedTransferTxn = ( - chain_nonce: number, - to: string, - value: EasyBalance + const doEgldSwap = async ( + sender: ElrondSigner, + nft: NftInfo, + value: BigNumber ) => { - - return new Transaction({ - receiver: mintContract, - gasLimit: new GasLimit(50000000), - value: new Balance(value.toString()), - data: TransactionPayload.contractCall() - .setFunction(new ContractFunction("freezeSend")) - .addArg(new U64Value(new BigNumber(chain_nonce))) - .addArg(new BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); + const esdts = await listEsdt((await sender.getAddress()).toString()); + const res = esdts[nft.native.nonce]; + + if (res === undefined || new BigNumber(res.balance).lt(value)) { + const utx = new Transaction({ + receiver: swapContract, + gasLimit: new GasLimit(300000000), + value: new Balance( + Egld.getToken(), + Egld.getNonce(), + new BigNumber(value.toString()) //.div(3) + ), + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("wrapEgld")) + .build(), + }); + + const tx = await signAndSend(sender, utx); + await transactionResult(tx.getHash()); + + return tx.getHash().toString(); + } + return undefined; }; const unsignedMintNftTxn = ( owner: Address, - { - identifier, - quantity, - name, - royalties, - hash, - attrs, - uris - }: NftIssueArgs + { identifier, quantity, name, royalties, hash, attrs, uris }: NftIssueArgs ) => { let baseArgs = TransactionPayload.contractCall() .setFunction(new ContractFunction("ESDTNFTCreate")) - .addArg(new TokenIdentifierValue(Buffer.from(identifier, 'utf-8'))) + .addArg(new TokenIdentifierValue(Buffer.from(identifier, "utf-8"))) .addArg(new BigUIntValue(new BigNumber(quantity ?? 1))) - .addArg(new BytesValue(Buffer.from(name, 'utf-8'))) + .addArg(new BytesValue(Buffer.from(name, "utf-8"))) .addArg(new U64Value(new BigNumber(royalties ?? 0))) - .addArg(new BytesValue(hash ? Buffer.from(hash, 'utf-8') : Buffer.alloc(0))) - .addArg(new BytesValue(attrs ? Buffer.from(attrs, 'utf-8') : Buffer.alloc(0))); + .addArg( + new BytesValue(hash ? Buffer.from(hash, "utf-8") : Buffer.alloc(0)) + ) + .addArg( + new BytesValue(attrs ? Buffer.from(attrs, "utf-8") : Buffer.alloc(0)) + ); for (const uri of uris) { - baseArgs = baseArgs.addArg(new BytesValue(Buffer.from(uri, 'utf-8'))); + baseArgs = baseArgs.addArg(new BytesValue(Buffer.from(uri, "utf-8"))); } return new Transaction({ receiver: owner, gasLimit: new GasLimit(70000000), // TODO: Auto derive - data: baseArgs.build() + data: baseArgs.build(), }); + }; + + function tokenIdentReal(tokenIdentifier: string): string { + const base = tokenIdentifier.split("-"); + base.pop(); + return base.join("-"); } const unsignedTransferNftTxn = ( chain_nonce: number, address: Address, to: string, - { token, nonce }: NftInfo + { tokenIdentifier, nonce }: EsdtNftInfo, + tx_fees: BigNumber, + mintWith: string ) => { return new Transaction({ receiver: address, - gasLimit: new GasLimit(70000000), + gasLimit: new GasLimit(300000000), data: TransactionPayload.contractCall() - .setFunction(new ContractFunction("ESDTNFTTransfer")) - .addArg(new TokenIdentifierValue(Buffer.from(token, "utf-8"))) + .setFunction(new ContractFunction("MultiESDTNFTTransfer")) + .addArg(new AddressValue(mintContract)) + .addArg(new BigUIntValue(new BigNumber(2))) + .addArg( + new TokenIdentifierValue( + Buffer.from(tokenIdentReal(tokenIdentifier), "utf-8") + ) + ) .addArg(new U64Value(new BigNumber(nonce))) .addArg(new BigUIntValue(new BigNumber(1))) - .addArg(new AddressValue(mintContract)) + .addArg(new TokenIdentifierValue(esdtSwaphex)) + .addArg(new U64Value(new BigNumber(0x0))) + .addArg(new BigUIntValue(tx_fees)) .addArg(new BytesValue(Buffer.from("freezeSendNft", "ascii"))) .addArg(new U64Value(new BigNumber(chain_nonce))) .addArg(new BytesValue(Buffer.from(to, "ascii"))) + .addArg(new BytesValue(Buffer.from(mintWith, "ascii"))) .build(), }); }; @@ -382,295 +448,454 @@ export const elrondHelperFactory: ( const unsignedUnfreezeNftTxn = ( address: Address, to: string, - id: number + { tokenIdentifier, nonce }: EsdtNftInfo, + tx_fees: BigNumber, + chain_nonce: string ) => { return new Transaction({ receiver: address, - gasLimit: new GasLimit(70000000), + gasLimit: new GasLimit(300000000), data: TransactionPayload.contractCall() - .setFunction(new ContractFunction("ESDTNFTTransfer")) - .addArg(new TokenIdentifierValue(esdtNftHex)) - .addArg(new U64Value(new BigNumber(id))) - .addArg(new BigUIntValue(new BigNumber(1))) + .setFunction(new ContractFunction("MultiESDTNFTTransfer")) .addArg(new AddressValue(mintContract)) + .addArg(new BigUIntValue(new BigNumber(2))) + .addArg( + new TokenIdentifierValue( + Buffer.from(tokenIdentReal(tokenIdentifier), "utf-8") + ) + ) + .addArg(new U64Value(new BigNumber(nonce))) + .addArg(new BigUIntValue(new BigNumber(1))) + .addArg(new TokenIdentifierValue(esdtSwaphex)) + .addArg(new U64Value(new BigNumber(0x0))) + .addArg(new BigUIntValue(tx_fees)) .addArg(new BytesValue(Buffer.from("withdrawNft", "ascii"))) - .addArg(new BytesValue(Buffer.from(to, "ascii"))) - .build(), - }); - } - - const unsignedUnfreezeTxn = ( - chain_nonce: number, - address: Address, - to: string, - value: EasyBalance - ) => { - return new Transaction({ - receiver: address, - gasLimit: new GasLimit(50000000), - data: TransactionPayload.contractCall() - .setFunction(new ContractFunction("ESDTNFTTransfer")) - .addArg(new TokenIdentifierValue(esdtHex)) .addArg(new U64Value(new BigNumber(chain_nonce))) - .addArg(new BigUIntValue(new BigNumber(value))) - .addArg(new AddressValue(mintContract)) - .addArg(new BytesValue(Buffer.from("withdraw", "ascii"))) .addArg(new BytesValue(Buffer.from(to, "ascii"))) .build(), }); - } + }; const listEsdt = async (owner: string) => { - const raw = await providerRest(`/address/${owner}/esdt`); - const dat = raw.data.data.esdts as { [index: string]: MaybeEsdtNftInfo }; - - return dat; - } - - async function listNft(owner: string): Promise> { - const ents: [string, MaybeEsdtNftInfo][] = Object.entries(await listEsdt(owner)); - - const fmapCb: (tok: [string, MaybeEsdtNftInfo]) => [] | [[string, EsdtNftInfo]] = ([tok, info]) => { - if (!isEsdtNftInfo(info)) { - return []; - } - - let sp = tok.split("-"); - let nonce = sp.pop() ?? ""; - return [[`${sp.join("-")}-${parseInt(nonce, 16).toString()}`, info]] - } - - return new Map(ents.flatMap(fmapCb)); - } + const raw = await providerRest(`/address/${owner}/esdt`); + const dat = raw.data.data.esdts as { [index: string]: MaybeEsdtNftInfo }; + return dat; + }; - const unsignedIssueESDTNft = ( - name: string, - ticker: string, - canFreeze: boolean | undefined, - canWipe: boolean | undefined, - canTransferNFTCreateRole: boolean | undefined + const unsignedIssueESDTNft = ( + name: string, + ticker: string, + canFreeze: boolean | undefined, + canWipe: boolean | undefined, + canTransferNFTCreateRole: boolean | undefined ) => { - let baseArgs = TransactionPayload.contractCall() - .setFunction(new ContractFunction("issueNonFungible")) - .addArg(new TokenIdentifierValue(Buffer.from(name, 'utf-8'))) - .addArg(new TokenIdentifierValue(Buffer.from(ticker, 'utf-8'))); - - if (canFreeze !== undefined) { - baseArgs = baseArgs.addArg(new BytesValue(Buffer.from("canFreeze", 'ascii'))) - .addArg(new BytesValue(Buffer.from(canFreeze ? "true" : "false", 'ascii'))); - } - if (canWipe !== undefined) { - baseArgs = baseArgs.addArg(new BytesValue(Buffer.from("canWipe", 'ascii'))) - .addArg(new BytesValue(Buffer.from(canWipe ? "true" : "false", "ascii"))); - } - if (canTransferNFTCreateRole !== undefined) { - baseArgs = baseArgs.addArg(new BytesValue(Buffer.from('canTransferNFTCreateRole', 'ascii'))) - .addArg(new BytesValue(Buffer.from(canTransferNFTCreateRole ? "true" : "false", "ascii"))); - } + let baseArgs = TransactionPayload.contractCall() + .setFunction(new ContractFunction("issueNonFungible")) + .addArg(new TokenIdentifierValue(Buffer.from(name, "utf-8"))) + .addArg(new TokenIdentifierValue(Buffer.from(ticker, "utf-8"))); + + if (canFreeze !== undefined) { + baseArgs = baseArgs + .addArg(new BytesValue(Buffer.from("canFreeze", "ascii"))) + .addArg( + new BytesValue(Buffer.from(canFreeze ? "true" : "false", "ascii")) + ); + } + if (canWipe !== undefined) { + baseArgs = baseArgs + .addArg(new BytesValue(Buffer.from("canWipe", "ascii"))) + .addArg( + new BytesValue(Buffer.from(canWipe ? "true" : "false", "ascii")) + ); + } + if (canTransferNFTCreateRole !== undefined) { + baseArgs = baseArgs + .addArg(new BytesValue(Buffer.from("canChangeOwner", "ascii"))) + .addArg( + new BytesValue( + Buffer.from(canTransferNFTCreateRole ? "true" : "false", "ascii") + ) + ); + } return new Transaction({ receiver: ESDT_ISSUE_ADDR, - value: new Balance(ESDT_ISSUE_COST), + value: new Balance( + Egld.getToken(), + Egld.getNonce(), + new BigNumber(ESDT_ISSUE_COST.toString()) + ), gasLimit: new GasLimit(60000000), - data: baseArgs.build() + data: baseArgs.build(), }); }; - const unsignedSetESDTRoles = ( - token: string, - target: Address, - roles: [ESDTRole] + token: string, + target: Address, + roles: ESDTRole[] ) => { let baseArgs = TransactionPayload.contractCall() - .setFunction(new ContractFunction("setSpecialRole")) - .addArg(new TokenIdentifierValue(Buffer.from(token))) - .addArg(new AddressValue(target)); - - for (const role of roles) { - baseArgs = baseArgs.addArg(new BytesValue(Buffer.from(role, 'utf-8'))); - } - - return new Transaction({ - receiver: ESDT_ISSUE_ADDR, - gasLimit: new GasLimit(70000000), // TODO: auto derive - data: baseArgs.build() - }); - } + .setFunction(new ContractFunction("setSpecialRole")) + .addArg(new TokenIdentifierValue(Buffer.from(token))) + .addArg(new AddressValue(target)); - async function getLockedNft({token, nonce}: NftInfo): Promise { - const nfts = await listNft(minter_address); - return nfts.get(`${token}-${nonce.toString()}`); - } + for (const role of roles) { + baseArgs = baseArgs.addArg(new BytesValue(Buffer.from(role, "utf-8"))); + } - const rawNftDecoder = (nftDat: Uint8Array) => { - /// TokenLen(4 by), TokenIdent(TokenLen by), Nonce(8 by) - /// BinaryCodec is broken for browsers. Decode manually :| - if (nftDat.length < 12) { - throw Error("not a wrapped nft") - } + return new Transaction({ + receiver: ESDT_ISSUE_ADDR, + gasLimit: new GasLimit(70000000), // TODO: auto derive + data: baseArgs.build(), + }); + }; - const tokenLen = (new Uint32Array(nftDat.slice(0, 4).reverse()))[0]; - if (nftDat.length !== 12 + tokenLen) { - throw Error("not a wrapped nft"); - } - const token = decoder.decode(nftDat.slice(4, 4+tokenLen)); - // TODO: Consider LO - // tfw js can't convert be bytes to u64 - const nonce = (new Uint32Array(nftDat.slice(4+tokenLen, 12 + tokenLen).reverse()))[0]; + async function extractAction(tx: Transaction): Promise { + let err; + await tx.awaitExecuted(provider).catch((e) => (err = e)); + if (err) { + await new Promise((r) => setTimeout(r, 3000)); + return await extractAction(tx); + } - return { token, nonce }; - } + const txr = await transactionResult(tx.getHash()); - async function extractId(tx: Transaction): Promise<[Transaction, EventIdent]> { - let err; - await tx.awaitExecuted(provider).catch(e => err = e); - if (err) { - await new Promise(r => setTimeout(r, 3000)); - return extractId(tx); - } + const id = filterEventId(txr["smartContractResults"]); - const txr = await transactionResult(tx.getHash()); + return id.toString(); + } - const id = filterEventId(txr["smartContractResults"]); + function estimateGas(base_fees: BigNumber) { + return base_fees.multipliedBy(gasPriceModif); // assume execution takes about twice as much gas fees + } - return [tx, id]; + async function getAddress(sender: ElrondSigner): Promise
{ + return new Address(await sender.getAddress()); } - + return { - rawTxnResult: transactionResult, - unsignedTransferTxn, - unsignedUnfreezeTxn, - unsignedTransferNftTxn, - unsignedUnfreezeNftTxn, - unsignedMintNftTxn, - unsignedSetESDTRoles, - async balance( - address: string | Address - ): Promise { + XpNft: elrondParams.esdt_nft, + async balance(address: string | Address): Promise { const wallet = new Account(new Address(address)); await wallet.sync(provider); return wallet.balance.valueOf(); }, - async balanceWrappedBatch( - address: string | Address, - chain_nonces: number[] - ): Promise> { - const esdts = Object.values(await listEsdt(address.toString())); - - const res = new Map(chain_nonces.map(v => [v, new BigNumber(0)])); - - for (const esdt of esdts) { - esdt.nonce && esdt.tokenIdentifier.startsWith(esdt.tokenIdentifier) && res.set(esdt.nonce, new BigNumber(esdt.balance)) - } - - return res; - }, - async transferNativeToForeign( - sender: ISigner, - chain_nonce: number, - to: string, - value: EasyBalance - ): Promise<[Transaction, EventIdent]> { - const txu = unsignedTransferTxn(chain_nonce, to, value) - const tx = await signAndSend(sender, txu); - - return await extractId(tx); + async isContractAddress(address) { + return Address.fromString(address).isContractAddress(); }, - async unfreezeWrapped( - sender: ISigner, - chain_nonce: number, - to: string, - value: EasyBalance - ): Promise<[Transaction, EventIdent]> { - const txu = unsignedUnfreezeTxn(chain_nonce, sender.getAddress(), to, value); - const tx = await signAndSend(sender, txu); - - return await extractId(tx); + getFeeMargin() { + return elrondParams.feeMargin; + }, + async extractTxnStatus(txn) { + const status = await provider.getTransactionStatus( + new TransactionHash(txn) + ); + if (status.isPending()) { + return TransactionStatus.PENDING; + } + if (status.isSuccessful()) { + return TransactionStatus.SUCCESS; + } + if (status.isFailed()) { + return TransactionStatus.FAILURE; + } + return TransactionStatus.UNKNOWN; }, + preTransfer: doEgldSwap, + preUnfreeze: doEgldSwap, + extractAction, async transferNftToForeign( - sender: ISigner, + sender: ElrondSigner, chain_nonce: number, to: string, - info: NftInfo - ): Promise<[Transaction, EventIdent]> { - const txu = unsignedTransferNftTxn(chain_nonce, sender.getAddress(), to, info); + info: NftInfo, + txFees: EasyBalance, + mintWith + ): Promise { + const txu = unsignedTransferNftTxn( + chain_nonce, + await getAddress(sender), + to, + info.native, + new BigNumber(txFees.toString()), + mintWith + ); const tx = await signAndSend(sender, txu); - - return await extractId(tx); + await notifyValidator( + tx, + sender.getAddress().toString(), + [info.uri], + undefined + // await extractAction(tx) + ); + + return tx; }, async unfreezeWrappedNft( - sender: ISigner, + sender: ElrondSigner, to: string, - nonce: number - ): Promise<[Transaction, EventIdent]> { - const txu = unsignedUnfreezeNftTxn(sender.getAddress(), to, nonce); + nft: NftInfo, + txFees: EasyBalance, + nonce + ): Promise { + console.log(`Unfreezing`); + const txu = unsignedUnfreezeNftTxn( + await getAddress(sender), + to, + nft.native, + new BigNumber(txFees.toString()), + nonce + ); const tx = await signAndSend(sender, txu); - - return await extractId(tx); + await notifyValidator( + tx, + sender.getAddress().toString(), + [nft.uri], + undefined + // await extractAction(tx) + ); + + return tx; }, - unsignedIssueESDTNft, async issueESDTNft( - sender: ISigner, + sender: ElrondSigner, name: string, ticker: string, canFreeze: boolean = false, canWipe: boolean = false, canTransferNFTCreateRole: boolean = false - ): Promise { - const txu = unsignedIssueESDTNft(name, ticker, canFreeze, canWipe, canTransferNFTCreateRole); + ): Promise { + const txu = unsignedIssueESDTNft( + name, + ticker, + canFreeze, + canWipe, + canTransferNFTCreateRole + ); - await signAndSend(sender, txu); + const tx = await signAndSend(sender, txu); + const res = await transactionResult(tx.getHash()); + const result = res["smartContractResults"].find((e: any) => + e.data.startsWith("@") + ); + const tickerh: string = result.data.split("@")[2]; + return Buffer.from(tickerh, "hex").toString("utf-8"); }, - async mintNft( - owner: ISigner, - args: NftIssueArgs - ): Promise { - const txu = unsignedMintNftTxn(owner.getAddress(), args); + async mintNft(owner: ElrondSigner, args: NftIssueArgs): Promise { + const txu = unsignedMintNftTxn(await getAddress(owner), args); + const tx = await signAndSend(owner, txu); + return tx.getHash().toString(); + }, + async mintableEsdts(address: Address): Promise { + const res = await providerRest.get( + `/address/${address.toString()}/esdts-with-role/ESDTRoleNFTCreate` + ); - await signAndSend(owner, txu); + return res.data["data"]["tokens"]; + }, + async preTransferRawTxn(id, address, value) { + if (!address || !value) { + throw new Error("address and value is required for elrond egld swap"); + } + const esdts = await listEsdt(address); + const res = esdts[id.native.nonce]; + if (res === undefined || new BigNumber(res.balance).lt(value)) { + const utx = new Transaction({ + receiver: swapContract, + gasLimit: new GasLimit(50000000), + value: new Balance( + Egld.getToken(), + Egld.getNonce(), + new BigNumber(value.toString()) + ), + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("wrapEgld")) + .build(), + }); + return utx.toPlainObject(); + } + return undefined; }, - listNft, - getLockedNft, - async setESDTRole( - manager: ISigner, - token: string, - target: Address, - roles: [ESDTRole] - ): Promise { + async setESDTRole( + manager: ElrondSigner, + token: string, + target: Address, + roles: ESDTRole[] + ): Promise { const txu = unsignedSetESDTRoles(token, target, roles); - await signAndSend(manager, txu); - }, - decodeWrappedNft( - raw_data: EsdtNftInfo - ): WrappedNft { - if (!raw_data.attributes) { - throw Error("can't decode chain nonce"); - } - return { - // TODO: CONSIDER ALL BE BYTES - chain_nonce: Base64.toUint8Array(raw_data.attributes!!)[0], - data: Base64.toUint8Array(raw_data.uris[0]) - } - }, - async decodeUrlFromRaw( - data: Uint8Array - ): Promise { - const nft_info = rawNftDecoder(data); - const locked = await getLockedNft(nft_info); - - if (locked === undefined) { - throw Error("Not a wrapped nft"); - } - - return Base64.atob(locked!.uris[0]); - } + const tx = await signAndSend(manager, txu); + await transactionResult(tx.getHash()); + return tx; + }, + async transferESDTOwnership(sender, token, target): Promise { + const txu = new Transaction({ + receiver: new Address( + "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u" + ), + gasLimit: new GasLimit(60000000), + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("transferOwnership")) + .addArg(new TokenIdentifierValue(Buffer.from(token, "utf-8"))) + .addArg(new AddressValue(target)) + .build(), + }); + + return await signAndSend(sender, txu); + }, + getNonce() { + return Chain.ELROND; + }, + async estimateValidateTransferNft( + _toAddress: string, + _nftUri: NftInfo + ) { + return estimateGas(NFT_TRANSFER_COST); // TODO: properly estimate NFT_TRANSFER_COST + }, + async estimateValidateUnfreezeNft(_to: string, _nftUri: NftInfo) { + return estimateGas(NFT_UNFREEZE_COST); // TODO: properly estimate NFT_UNFREEZE_COST + }, + async unfreezeWrappedNftBatch(sender, chainNonce, to, nfts, txFees) { + const txu = new Transaction({ + receiver: await getAddress(sender), + gasLimit: new GasLimit(40000000 + 5000000 * nfts.length), // TODO: better estimate + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("MultiESDTNFTTransfer")) + .setArgs([ + new AddressValue(mintContract), + new BigUIntValue(new BigNumber(nfts.length + 1)), + ...nfts.flatMap((nft) => [ + new TokenIdentifierValue(esdtNftHex), + new U64Value(new BigNumber(nft.native.nonce)), + new BigUIntValue(new BigNumber(1)), + ]), + new TokenIdentifierValue(esdtSwaphex), + new U64Value(new BigNumber(0x0)), + new BigUIntValue(txFees), + new BytesValue(Buffer.from("withdrawBatchNft", "ascii")), + new U64Value(new BigNumber(chainNonce)), + new BytesValue(Buffer.from(to, "ascii")), + ]) + .build(), + }); + const tx = await signAndSend(sender, txu); + await notifyValidator( + tx, + sender.getAddress().toString(), + nfts.map((n) => n.uri), + undefined + // await extractAction(tx) + ); + + return tx; + }, + async transferNftBatchToForeign( + sender, + chainNonce, + to, + nfts, + mintWith, + txFees + ) { + const txu = new Transaction({ + receiver: await getAddress(sender), + gasLimit: new GasLimit(50000000 + 5000000 * nfts.length), // TODO: better estimate + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("MultiESDTNFTTransfer")) + .setArgs([ + new AddressValue(mintContract), + new BigUIntValue(new BigNumber(nfts.length + 1)), + ...nfts.flatMap((nft) => [ + new TokenIdentifierValue( + Buffer.from(tokenIdentReal(nft.native.tokenIdentifier), "utf-8") + ), + new U64Value(new BigNumber(nft.native.nonce)), + new BigUIntValue(new BigNumber(1)), + ]), + new TokenIdentifierValue(esdtSwaphex), + new U64Value(new BigNumber(0x0)), + new BigUIntValue(txFees), + new BytesValue(Buffer.from("freezeSendBatchNft", "ascii")), + new U64Value(new BigNumber(chainNonce)), + new BytesValue(Buffer.from(to, "ascii")), + new BytesValue(Buffer.from(mintWith, "ascii")), + ]) + .build(), + }); + const tx = await signAndSend(sender, txu); + await notifyValidator( + tx, + sender.getAddress().toString(), + nfts.map((n) => n.uri), + undefined + // await extractAction(tx) + ); + + return tx; + }, + async wegldBalance(addr) { + const esdtInfo = await provider.getAddressEsdt( + new Address(addr), + elrondParams.esdt_swap + ); + + return new BigNumber(esdtInfo.balance); + }, + async unwrapWegld(sender: ElrondSigner, amount: BigNumber) { + const txu = new Transaction({ + receiver: swapContract, + gasLimit: new GasLimit(300500000), + data: TransactionPayload.contractCall() + .setFunction(new ContractFunction("ESDTTransfer")) + .addArg(new TokenIdentifierValue(esdtSwaphex)) + .addArg(new U64Value(amount)) + .addArg(new BytesValue(Buffer.from("unwrapEgld"))) + .build(), + }); + + const tx = await signAndSend(sender, txu); + + return tx.getHash().toString(); + }, + async estimateValidateTransferNftBatch(_, nfts) { + return estimateGas(new BigNumber(360000000 + 5000000 * nfts.length)); + }, + async estimateValidateUnfreezeNftBatch(_, nfts) { + return estimateGas(new BigNumber(340000000 + 5000000 * nfts.length)); + }, + async validateAddress(adr: string) { + try { + new Address(adr); + return await providerRest + .get(`/address/${adr}/esdt`) + .then((_) => true) + .catch((_) => false); + } catch (_) { + return false; + } + }, + async getTokenURI(_, tokenId) { + if (tokenId) { + const url = `https://api.elrond.com/nfts/${tokenId}`; + const res = await axios(url).catch(() => ({ data: null })); + + if (res.data?.metadata) { + return url; + } + + const uri = res.data?.uris[1] || res.data?.uris[0]; + if (uri) { + return Base64.decode(uri); + } + } + return ""; + }, }; -}; +} function filterEventId(results: Array): number { for (const res of results) { diff --git a/src/helpers/hedera/helper.ts b/src/helpers/hedera/helper.ts new file mode 100644 index 000000000..269b37501 --- /dev/null +++ b/src/helpers/hedera/helper.ts @@ -0,0 +1,897 @@ +/** + * Web3 Implementation for cross chain traits + * @module + */ +import BigNumber from "bignumber.js"; + +import { + BalanceCheck, + EstimateTxFeesBatch, + FeeMargins, + GetFeeMargins, + GetProvider, + IsContractAddress, + MintNft, + TransferNftForeign, + TransferNftForeignBatch, + UnfreezeForeignNft, + UnfreezeForeignNftBatch, + ParamsGetter, +} from "../chain"; +import { + BigNumber as EthBN, + ContractTransaction, + ethers, + PopulatedTransaction, + providers, + Signer, + VoidSigner, + Wallet, +} from "ethers"; +import { Provider, TransactionResponse } from "@ethersproject/providers"; +import { + Erc1155Minter, + Erc1155Minter__factory, + Minter__factory, + UserNftMinter, + UserNftMinter__factory, +} from "xpnet-web3-contracts"; +import { + ChainNonceGet, + EstimateTxFees, + ExtractAction, + ExtractTxnStatus, + GetTokenURI, + NftInfo, + PreTransfer, + PreTransferRawTxn, + TransactionStatus, + ValidateAddress, + WhitelistCheck, +} from "../.."; +import { ChainNonce } from "../../type-utils"; +import { EvNotifier } from "../../notifier"; +import axios from "axios"; +import { hethers } from "@hashgraph/hethers"; + +type HSDK = typeof import("@hashgraph/sdk"); +let hashSDK: HSDK; + +/** + * Information required to perform NFT transfers in this chain + */ +export type EthNftInfo = { + chainId: string; + tokenId: string; + owner: string; + uri: string; + contract: string; + contractType: "ERC721" | "ERC1155"; +}; + +/** + * Arguments required for minting a new nft + * + * contract: address of the sc + * token: token ID of the newly minted nft + * owner: Owner of the newly minted nft + * uri: uri of the nft + */ +export type MintArgs = { + contract: string; + uri: string; +}; + +export interface IsApproved { + isApprovedForMinter( + address: NftInfo, + sender: Sender, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +export interface Approve { + approveForMinter( + address: NftInfo, + sender: Sender, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +hethers.providers.BaseProvider.prototype.getGasPrice = async () => { + return EthBN.from("1"); +}; + +type NullableCustomData = Record | undefined; + +/** + * Base util traits + */ +export type BaseWeb3Helper = BalanceCheck & + /** + * Mint an nft in the given ERC1155 smart contract + * + * @argument signer owner of the smart contract + * @argument args See [[MintArgs]] + */ MintNft & { + /** + * Deploy an ERC721 smart contract + * + * @argument owner Owner of this smart contract + * @returns Address of the deployed smart contract + */ + deployErc721(owner: Signer): Promise; + } & { + mintNftErc1155( + owner: Signer, + options: MintArgs + ): Promise; + }; + +type ExtraArgs = { gasPrice: ethers.BigNumber }; + +/** + * Traits implemented by this module + */ +export type Web3Helper = BaseWeb3Helper & + TransferNftForeign & + UnfreezeForeignNft & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & + EstimateTxFees & + EstimateTxFeesBatch & + ChainNonceGet & + IsApproved & + Approve & + ValidateAddress & + ExtractAction & { + createWallet(privateKey: string): Wallet; + } & Pick, "preTransfer"> & + PreTransferRawTxn & + ExtractTxnStatus & + GetProvider & { + XpNft: string; + XpNft1155: string; + } & WhitelistCheck & + GetFeeMargins & + IsContractAddress & + GetTokenURI & + ParamsGetter & { + injectSDK(sdk: HSDK): void; + } & { + listHederaClaimableNFT( + proxyContract: string, + htsToken: string, + signer: any + ): Promise; + } & { + claimNFT(token: string, htsToken: string, signer: any): Promise; + } & { + assosiateToken(token: string, signer: any): Promise; + }; + +/** + * Create an object implementing minimal utilities for a web3 chain + * + * @param provider An ethers.js provider object + */ +export async function baseWeb3HelperFactory( + provider: Provider, + nonce: number +): Promise { + const w3 = provider; + + return { + async balance(address: string): Promise { + const bal = await w3.getBalance(address); + + // ethers BigNumber is not compatible with our bignumber + return new BigNumber(bal.toString()); + }, + async deployErc721(owner: Signer): Promise { + const factory = new UserNftMinter__factory(owner); + const contract = await factory.deploy(); + + return contract.address; + }, + async mintNftErc1155(owner: Signer, { contract }) { + const erc1155 = Erc1155Minter__factory.connect(contract!, owner); + const tx = await erc1155.mintNft(await owner.getAddress()); + + return tx; + }, + async mintNft( + owner: Signer, + { contract, uri }: MintArgs + ): Promise { + const erc721 = UserNftMinter__factory.connect(contract!, owner); + const txm = await erc721 + .mint(uri, { gasLimit: 1000000 }) + .catch(async (e) => { + if (nonce === 33) { + let tx; + while (!tx) { + tx = await provider.getTransaction(e["returnedHash"]); + } + return tx; + } + throw e; + }); + return txm; + }, + }; +} + +/** + * Create an object implementing cross chain utilities for a web3 chain + * + * @param provider An ethers.js provider object + * @param minter_addr Address of the minter smart contract + * @param minter_abi ABI of the minter smart contract + */ +export interface Web3Params { + provider: Provider; + notifier: EvNotifier; + minter_addr: string; + erc721_addr: string; + erc1155_addr: string; + erc721Minter: string; + erc1155Minter: string; + nonce: ChainNonce; + feeMargin: FeeMargins; +} + +type NftMethodVal = { + freeze: "freezeErc1155" | "freezeErc721"; + validateUnfreeze: "validateUnfreezeErc1155" | "validateUnfreezeErc721"; + umt: typeof Erc1155Minter__factory | typeof UserNftMinter__factory; + approved: ( + umt: T, + sender: string, + minterAddr: string, + tok: string, + customData: NullableCustomData + ) => Promise; + approve: ( + umt: T, + forAddr: string, + tok: string, + txnUp: (tx: PopulatedTransaction) => Promise, + customData: NullableCustomData, + gasPrice: ethers.BigNumberish | undefined, + signer: any + ) => Promise; +}; + +type EthNftMethodVal = NftMethodVal; + +type NftMethodMap = Record< + "ERC1155" | "ERC721", + EthNftMethodVal | EthNftMethodVal +>; + +export const NFT_METHOD_MAP: NftMethodMap = { + ERC1155: { + freeze: "freezeErc1155", + validateUnfreeze: "validateUnfreezeErc1155", + umt: Erc1155Minter__factory, + approved: ( + umt: Erc1155Minter, + sender: string, + minterAddr: string, + _tok: string, + customData: NullableCustomData + ) => { + return umt.isApprovedForAll(sender, minterAddr, { + gasLimit: "85000", + customData, + }); + }, + approve: async ( + umt: Erc1155Minter, + forAddr: string, + _tok: string, + txnUp: (tx: PopulatedTransaction) => Promise, + customData: NullableCustomData + ) => { + const tx = await umt.populateTransaction.setApprovalForAll( + forAddr, + true, + { + gasLimit: "85000", + customData, + } + ); + await txnUp(tx); + return await umt.signer.sendTransaction(tx); + }, + }, + ERC721: { + freeze: "freezeErc721", + validateUnfreeze: "validateUnfreezeErc721", + umt: UserNftMinter__factory, + approved: async ( + umt: UserNftMinter, + signer: any, + minterAddr: string, + tok: string, + customData: NullableCustomData + ) => { + customData; + + const call = new hashSDK.ContractCallQuery() + .setContractId(hashSDK.ContractId.fromSolidityAddress(umt.address)) + .setGas(700_000) + .setQueryPayment(new hashSDK.Hbar(5)) + .setFunction( + "getApproved", + new hashSDK.ContractFunctionParameters().addUint256(+tok) + ); + + const txResponse1 = await call.executeWithSigner(signer); + const approved = txResponse1?.getAddress(0); + return approved?.toLowerCase() == minterAddr.toLowerCase(); + }, + approve: async ( + umt: UserNftMinter, + forAddr: string, + tok: string, + ___: (tx: PopulatedTransaction) => Promise, + _: any, + __: any, + signer: any + ) => { + const transaction = await new hashSDK.ContractExecuteTransaction() + .setContractId(hashSDK.ContractId.fromSolidityAddress(umt.address)) + .setGas(1_000_000) + .setMaxTransactionFee(new hashSDK.Hbar(10)) + //.setPayableAmount(new hashSDK.Hbar(5)) + .setFunction( + "approve", + new hashSDK.ContractFunctionParameters() + .addAddress(forAddr) + .addUint256(Number(tok)) + ) + .freezeWithSigner(signer); + + //Sign with the client operator private key to pay for the transaction and submit the query to a Hedera network + const txResponse = await transaction.executeWithSigner(signer); + + return { + wait: () => new Promise((r) => r(true)), + hash: txResponse.transactionId, + } as any; + }, + }, +}; + +export async function web3HelperFactory( + params: Web3Params & { api: string } +): Promise { + const txnUnderpricedPolyWorkaround = + params.nonce == 7 + ? async (utx: PopulatedTransaction) => { + const res = await axios + .get( + "https://gpoly.blockscan.com/gasapi.ashx?apikey=key&method=pendingpooltxgweidata" + ) + .catch(async () => { + return await axios.get( + "https://gasstation-mainnet.matic.network/v2" + ); + }); + const { result, fast } = res.data; + const trackerGas = result?.rapidgaspricegwei || fast?.maxFee; + + if (trackerGas) { + const sixtyGwei = ethers.utils.parseUnits( + Math.ceil(trackerGas).toString(), + "gwei" + ); + utx.maxFeePerGas = sixtyGwei; + utx.maxPriorityFeePerGas = sixtyGwei; + } + } + : () => Promise.resolve(); + + const w3 = params.provider; + const { minter_addr, provider } = params; + const minter = Minter__factory.connect(minter_addr, provider); + + async function notifyValidator( + fromHash: string, + actionId?: string, + type?: string, + toChain?: number, + txFees?: string, + senderAddress?: string, + targetAddress?: string, + nftUri?: string, + tokenId?: string, + contract?: string + ): Promise { + await params.notifier.notifyWeb3( + params.nonce, + fromHash, + actionId, + type, + toChain, + txFees, + senderAddress, + targetAddress, + nftUri, + tokenId, + contract + ); + } + + //@ts-ignore + async function getTransaction(hash: string) { + let trx; + let fails = 0; + while (!trx && fails < 7) { + trx = await provider.getTransaction(hash); + await new Promise((resolve) => + setTimeout(() => resolve("wait"), 5000 + fails * 2) + ); + fails++; + } + + return trx as TransactionResponse; + } + + async function extractAction(txr: TransactionResponse): Promise { + const receipt = await txr.wait(); + const log = receipt.logs.find((log) => log.address === minter.address); + if (log === undefined) { + throw Error("Couldn't extract action_id"); + } + + const evdat = minter.interface.parseLog(log); + const action_id: string = evdat.args[0].toString(); + return action_id; + } + + const sanifyTrx = (trx: any) => { + const validTrx = String(trx).replace("@", "-"); + const array = validTrx.split(""); + array[validTrx.lastIndexOf(".")] = "-"; + return array.join(""); + }; + + const isApprovedForMinter = async ( + id: NftInfo, + signer: Signer + ) => { + return false; + //@ts-ignore + signer._isSigner = true; + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + signer + ); + const toApprove = + params.nonce !== 0x1d + ? minter_addr + : id.native.uri.includes("herokuapp.com") + ? params.minter_addr + : params.erc721_addr; + + return await NFT_METHOD_MAP[id.native.contractType].approved( + erc as any, + signer as any, + toApprove, + id.native.tokenId, + params.nonce === 0x1d ? {} : undefined + ); + }; + + const approveForMinter = async ( + id: NftInfo, + sender: Signer, + _txFees: BigNumber, + gasPrice: ethers.BigNumberish | undefined + ) => { + const isApproved = await isApprovedForMinter(id, sender); + if (isApproved) { + return undefined; + } + //@ts-ignore + sender._isSigner = true; + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + sender + ); + + const toApprove = + params.nonce !== 0x1d + ? minter_addr + : id.native.uri.includes("herokuapp.com") + ? params.minter_addr + : params.erc721_addr; + + const receipt = await NFT_METHOD_MAP[id.native.contractType].approve( + erc as any, + toApprove, + id.native.tokenId, + txnUnderpricedPolyWorkaround, + params.nonce === 0x1d ? {} : undefined, + gasPrice, + sender + ); + + await receipt.wait(); + + return receipt.hash; + }; + + const base = await baseWeb3HelperFactory(params.provider, params.nonce); + + return { + ...base, + XpNft: params.erc721_addr, + XpNft1155: params.erc1155_addr, + getParams: () => params, + injectSDK(sdk) { + hashSDK = sdk; + }, + approveForMinter, + getProvider: () => provider, + async estimateValidateUnfreezeNft(_to, _id, _mW) { + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + }, + getFeeMargin() { + return params.feeMargin; + }, + isApprovedForMinter, + preTransfer: (s, id, fee, args) => + approveForMinter(id, s, fee, args?.gasPrice), + extractAction, + async isContractAddress(address) { + const code = await provider.getCode(address); + return code !== "0x"; + }, + getNonce: () => params.nonce, + async preTransferRawTxn(id, address, _value) { + const isApproved = await isApprovedForMinter( + id, + new VoidSigner(address, provider) + ); + + if (isApproved) { + return undefined; + } + + const erc = UserNftMinter__factory.connect( + id.native.contract, + new VoidSigner(address, provider) + ); + + const approvetxn = await erc.populateTransaction.approve( + minter_addr, + id.native.tokenId + ); + + return approvetxn; + }, + + async extractTxnStatus(txn) { + const status = (await (await provider.getTransaction(txn)).wait()).status; + if (status === undefined) { + return TransactionStatus.PENDING; + } + if (status === 1) { + return TransactionStatus.SUCCESS; + } else if (status === 0) { + return TransactionStatus.FAILURE; + } + return TransactionStatus.UNKNOWN; + }, + async getTokenURI(contract, tokenId) { + if (ethers.utils.isAddress(contract) && tokenId) { + const erc721 = UserNftMinter__factory.connect(contract!, provider); + //const erc1155 = Erc1155Minter__factory.connect(contract!, provider) + //erc1155.uri() + return await erc721.tokenURI(tokenId).catch(() => ""); + } + return ""; + }, + async unfreezeWrappedNftBatch(signer, chainNonce, to, nfts, txFees) { + const tx = await minter + .connect(signer) + .populateTransaction.withdrawNftBatch( + to, + chainNonce, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + nfts[0].native.contract, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + const res = await signer.sendTransaction(tx); + + // await notifyValidator( + // res.hash, + // await extractAction(res), + // "Unfreeze", + // chainNonce.toString(), + // txFees.toString(), + // await signer.getAddress(), + // to, + // res.data + // ); + await notifyValidator(res.hash); + + return res; + }, + async transferNftBatchToForeign( + signer, + chainNonce, + to, + nfts, + mintWith, + txFees + ) { + const tx = await minter + .connect(signer) + .populateTransaction.freezeErc1155Batch( + nfts[0].native.contract, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + chainNonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const res = await signer.sendTransaction(tx); + + await notifyValidator(res.hash); + + return res; + }, + async estimateValidateTransferNftBatch(_to, nfts, _mintWith) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + async estimateValidateUnfreezeNftBatch(_to, nfts) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + createWallet(privateKey: string): Wallet { + return new Wallet(privateKey, provider); + }, + async transferNftToForeign( + sender: Signer, + chain_nonce: number, + to: string, + id: NftInfo, + _: BigNumber, + mintWith: string, + __: ethers.BigNumberish | undefined = undefined, + ___ + ): Promise { + const method = NFT_METHOD_MAP[id.native.contractType].freeze; + + const tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [id.collectionIdent, id.native.tokenId] + ); + + const contract = params.erc721_addr; + + const transaction = await new hashSDK.ContractExecuteTransaction() + .setContractId( + hashSDK.ContractId.fromSolidityAddress(params.minter_addr) + ) + .setGas(2_000_000) + .setMaxTransactionFee(new hashSDK.Hbar(12)) + .setPayableAmount(7) + .setFunction( + method, + new hashSDK.ContractFunctionParameters() + .addAddress(contract) + //@ts-ignore + .addUint256(String(tokenId)) + //@ts-ignore + .addUint64(String(chain_nonce)) + .addString(to) + .addString(mintWith) + ) + .freezeWithSigner(sender as any); + + const txResponse = await transaction.executeWithSigner(sender as any); + + const hash = sanifyTrx(txResponse.transactionId); + await notifyValidator(hash); + return { + hash, + } as any; + + /*const tx = await minter + .connect(sender) + .populateTransaction[method]( + id.native.contract, + id.native.tokenId, + chain_nonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)), + gasLimit, + gasPrice, + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const txr: TransactionResponse | unknown = await sender + .sendTransaction(tx) + .catch((e) => { + if (params.nonce === 33) { + return e; + } else throw e; + }); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = txr["transactionId"]; + } else if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = txr["returnedHash"] || txr.hash; + } else { + //@ts-ignore checked normal evm + txHash = txr.hash; + } + + await notifyValidator( + //@ts-ignore + txHash + ); + if (params.nonce === 33) { + return await provider.getTransaction(txHash); + } + return txr as any;*/ + }, + async unfreezeWrappedNft( + sender: any, + to: string, + id: NftInfo, + ____: BigNumber, + nonce, + _ = undefined, + __ + ): Promise { + const tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [EthBN.from(id.collectionIdent), id.native.tokenId] + ); + + const contract = params.erc721_addr; + + const transaction = await new hashSDK.ContractExecuteTransaction() + .setContractId( + hashSDK.ContractId.fromSolidityAddress(params.minter_addr) + ) + .setGas(2_000_000) + .setMaxTransactionFee(new hashSDK.Hbar(10)) + .setPayableAmount(5) + .setFunction( + "withdrawNft", + new hashSDK.ContractFunctionParameters() + .addString(to) + //@ts-ignore + .addUint64(String(nonce)) + //@ts-ignore + .addUint256(String(tokenId)) + .addAddress(contract) + ) + .freezeWithSigner(sender); + + const txResponse = await transaction.executeWithSigner(sender); + const hash = sanifyTrx(txResponse.transactionId); + await notifyValidator(hash); + return { + hash, + } as any; + }, + async estimateValidateTransferNft( + _to: string, + _nftUri: NftInfo, + _mintWith + ): Promise { + const gas = await provider.getGasPrice(); + + return new BigNumber(gas.mul(150_000).toString()); + }, + async estimateContractDep(toChain: any): Promise { + try { + const gas = await provider.getGasPrice(); + const pro = toChain.getProvider(); + const wl = ["0x47Bf0dae6e92e49a3c95e5b0c71422891D5cd4FE"]; + const gk = 123; + const gkx = 42; + const factory = new ethers.ContractFactory( + Minter__factory.abi, + Minter__factory.bytecode + ); + const estimateGas = await pro.estimateGas( + factory.getDeployTransaction(gk, gkx, wl) + ); + const contractFee = gas.mul(estimateGas); + const sum = new BigNumber(contractFee.toString()); + return sum; + } catch (error: any) { + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + } + }, + validateAddress(adr) { + return Promise.resolve(ethers.utils.isAddress(adr)); + }, + isNftWhitelisted(nft) { + return minter.nftWhitelist(nft.native.contract); + }, + async listHederaClaimableNFT(proxyContract, htsToken, signer) { + const query = new hashSDK.ContractCallQuery() + .setContractId(hashSDK.ContractId.fromSolidityAddress(proxyContract)) + .setGas(700_000) + .setMaxQueryPayment(new hashSDK.Hbar(3)) + .setQueryPayment(new hashSDK.Hbar(3)) + .setFunction( + "getClaimableNfts", + new hashSDK.ContractFunctionParameters() + .addAddress(signer.address) + .addAddress(htsToken) + ); + + await query.executeWithSigner(signer); + + return ""; + }, + async assosiateToken(token, signer) { + const trx = await new hashSDK.TokenAssociateTransaction() + .setAccountId(signer.accountToSign) + .setTokenIds([hashSDK.TokenId.fromSolidityAddress(token)]) + .freezeWithSigner(signer); + + const result = await trx.executeWithSigner(signer).catch((err) => { + console.log(err, "assoc"); + }); + + if (!result) { + throw new Error("Failed to Associate token to an account"); + } + + return true; + }, + async claimNFT(token, htsToken, signer) { + const trx = await new hashSDK.ContractExecuteTransaction() + .setContractId( + hashSDK.ContractId.fromSolidityAddress(params.erc721_addr) + ) + .setGas(900_000) + .setMaxTransactionFee(new hashSDK.Hbar(12)) + .setFunction( + "claimNft", + new hashSDK.ContractFunctionParameters() + //@ts-ignore + .addInt64(token) + .addAddress(htsToken) + ) + .freezeWithSigner(signer); + + const res = await trx.executeWithSigner(signer); + return Boolean(res.transactionId); + }, + }; +} diff --git a/src/helpers/hedera/hts_abi.ts b/src/helpers/hedera/hts_abi.ts new file mode 100644 index 000000000..f2d45707d --- /dev/null +++ b/src/helpers/hedera/hts_abi.ts @@ -0,0 +1,3565 @@ +export const HEDERA_TOKEN_SERVICE_ABI = [ + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + ], + name: "allowance", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "approve", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "approved", + type: "address", + }, + { + internalType: "uint256", + name: "serialNumber", + type: "uint256", + }, + ], + name: "approveNFT", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "associateToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address[]", + name: "tokens", + type: "address[]", + }, + ], + name: "associateTokens", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint64", + name: "amount", + type: "uint64", + }, + { + internalType: "int64[]", + name: "serialNumbers", + type: "int64[]", + }, + ], + name: "burnToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "uint64", + name: "newTotalSupply", + type: "uint64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "token", + type: "tuple", + }, + { + internalType: "uint64", + name: "initialTotalSupply", + type: "uint64", + }, + { + internalType: "uint32", + name: "decimals", + type: "uint32", + }, + ], + name: "createFungibleToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "address", + name: "tokenAddress", + type: "address", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "token", + type: "tuple", + }, + { + internalType: "uint64", + name: "initialTotalSupply", + type: "uint64", + }, + { + internalType: "uint32", + name: "decimals", + type: "uint32", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "minimumAmount", + type: "uint32", + }, + { + internalType: "uint32", + name: "maximumAmount", + type: "uint32", + }, + { + internalType: "bool", + name: "netOfTransfers", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FractionalFee[]", + name: "fractionalFees", + type: "tuple[]", + }, + ], + name: "createFungibleTokenWithCustomFees", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "address", + name: "tokenAddress", + type: "address", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "token", + type: "tuple", + }, + ], + name: "createNonFungibleToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "address", + name: "tokenAddress", + type: "address", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "token", + type: "tuple", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.RoyaltyFee[]", + name: "royaltyFees", + type: "tuple[]", + }, + ], + name: "createNonFungibleTokenWithCustomFees", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "address", + name: "tokenAddress", + type: "address", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "address", + name: "accountID", + type: "address", + }, + { + internalType: "int64", + name: "amount", + type: "int64", + }, + ], + internalType: "struct IHederaTokenService.AccountAmount[]", + name: "transfers", + type: "tuple[]", + }, + { + components: [ + { + internalType: "address", + name: "senderAccountID", + type: "address", + }, + { + internalType: "address", + name: "receiverAccountID", + type: "address", + }, + { + internalType: "int64", + name: "serialNumber", + type: "int64", + }, + ], + internalType: "struct IHederaTokenService.NftTransfer[]", + name: "nftTransfers", + type: "tuple[]", + }, + ], + internalType: "struct IHederaTokenService.TokenTransferList[]", + name: "tokenTransfers", + type: "tuple[]", + }, + ], + name: "cryptoTransfer", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "deleteToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "dissociateToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address[]", + name: "tokens", + type: "address[]", + }, + ], + name: "dissociateTokens", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "freezeToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint256", + name: "serialNumber", + type: "uint256", + }, + ], + name: "getApproved", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "address", + name: "approved", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getFungibleTokenInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + components: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "hedera", + type: "tuple", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "minimumAmount", + type: "uint32", + }, + { + internalType: "uint32", + name: "maximumAmount", + type: "uint32", + }, + { + internalType: "bool", + name: "netOfTransfers", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FractionalFee[]", + name: "fractionalFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.RoyaltyFee[]", + name: "royaltyFees", + type: "tuple[]", + }, + { + internalType: "bool", + name: "defaultKycStatus", + type: "bool", + }, + { + internalType: "bool", + name: "deleted", + type: "bool", + }, + { + internalType: "string", + name: "ledgerId", + type: "string", + }, + { + internalType: "bool", + name: "pauseStatus", + type: "bool", + }, + { + internalType: "uint64", + name: "totalSupply", + type: "uint64", + }, + ], + internalType: "struct IHederaTokenService.TokenInfo", + name: "tokenInfo", + type: "tuple", + }, + { + internalType: "uint32", + name: "decimals", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.FungibleTokenInfo", + name: "fungibleTokenInfo", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "int64", + name: "serialNumber", + type: "int64", + }, + ], + name: "getNonFungibleTokenInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + components: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "hedera", + type: "tuple", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "minimumAmount", + type: "uint32", + }, + { + internalType: "uint32", + name: "maximumAmount", + type: "uint32", + }, + { + internalType: "bool", + name: "netOfTransfers", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FractionalFee[]", + name: "fractionalFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.RoyaltyFee[]", + name: "royaltyFees", + type: "tuple[]", + }, + { + internalType: "bool", + name: "defaultKycStatus", + type: "bool", + }, + { + internalType: "bool", + name: "deleted", + type: "bool", + }, + { + internalType: "string", + name: "ledgerId", + type: "string", + }, + { + internalType: "bool", + name: "pauseStatus", + type: "bool", + }, + { + internalType: "uint64", + name: "totalSupply", + type: "uint64", + }, + ], + internalType: "struct IHederaTokenService.TokenInfo", + name: "tokenInfo", + type: "tuple", + }, + { + internalType: "int64", + name: "serialNumber", + type: "int64", + }, + { + internalType: "address", + name: "ownerId", + type: "address", + }, + { + internalType: "int64", + name: "creationTime", + type: "int64", + }, + { + internalType: "bytes", + name: "metadata", + type: "bytes", + }, + { + internalType: "address", + name: "spenderId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.NonFungibleTokenInfo", + name: "nonFungibleTokenInfo", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenCustomFees", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "minimumAmount", + type: "uint32", + }, + { + internalType: "uint32", + name: "maximumAmount", + type: "uint32", + }, + { + internalType: "bool", + name: "netOfTransfers", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FractionalFee[]", + name: "fractionalFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.RoyaltyFee[]", + name: "royaltyFees", + type: "tuple[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenDefaultFreezeStatus", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "defaultFreezeStatus", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenDefaultKycStatus", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "defaultKycStatus", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenExpiryInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "hedera", + type: "tuple", + }, + { + components: [ + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "bool", + name: "useCurrentTokenForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FixedFee[]", + name: "fixedFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "minimumAmount", + type: "uint32", + }, + { + internalType: "uint32", + name: "maximumAmount", + type: "uint32", + }, + { + internalType: "bool", + name: "netOfTransfers", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.FractionalFee[]", + name: "fractionalFees", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "numerator", + type: "uint32", + }, + { + internalType: "uint32", + name: "denominator", + type: "uint32", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + { + internalType: "address", + name: "tokenId", + type: "address", + }, + { + internalType: "bool", + name: "useHbarsForPayment", + type: "bool", + }, + { + internalType: "address", + name: "feeCollector", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.RoyaltyFee[]", + name: "royaltyFees", + type: "tuple[]", + }, + { + internalType: "bool", + name: "defaultKycStatus", + type: "bool", + }, + { + internalType: "bool", + name: "deleted", + type: "bool", + }, + { + internalType: "string", + name: "ledgerId", + type: "string", + }, + { + internalType: "bool", + name: "pauseStatus", + type: "bool", + }, + { + internalType: "uint64", + name: "totalSupply", + type: "uint64", + }, + ], + internalType: "struct IHederaTokenService.TokenInfo", + name: "tokenInfo", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + ], + name: "getTokenKey", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenType", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "int32", + name: "tokenType", + type: "int32", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "grantTokenKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "operator", + type: "address", + }, + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "isFrozen", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "frozen", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "isKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "kycGranted", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "isToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "isToken", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint64", + name: "amount", + type: "uint64", + }, + { + internalType: "bytes[]", + name: "metadata", + type: "bytes[]", + }, + ], + name: "mintToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "uint64", + name: "newTotalSupply", + type: "uint64", + }, + { + internalType: "int64[]", + name: "serialNumbers", + type: "int64[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "pauseToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "revokeTokenKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + name: "setApprovalForAll", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "serialNumber", + type: "uint256", + }, + ], + name: "transferFromNFT", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "int64", + name: "serialNumber", + type: "int64", + }, + ], + name: "transferNFT", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address[]", + name: "sender", + type: "address[]", + }, + { + internalType: "address[]", + name: "receiver", + type: "address[]", + }, + { + internalType: "int64[]", + name: "serialNumber", + type: "int64[]", + }, + ], + name: "transferNFTs", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "int64", + name: "amount", + type: "int64", + }, + ], + name: "transferToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address[]", + name: "accountId", + type: "address[]", + }, + { + internalType: "int64[]", + name: "amount", + type: "int64[]", + }, + ], + name: "transferTokens", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "unfreezeToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "unpauseToken", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiryInfo", + type: "tuple", + }, + ], + name: "updateTokenExpiryInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "tokenInfo", + type: "tuple", + }, + ], + name: "updateTokenInfo", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "keys", + type: "tuple[]", + }, + ], + name: "updateTokenKeys", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "uint32", + name: "amount", + type: "uint32", + }, + ], + name: "wipeTokenAccount", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "int64[]", + name: "serialNumbers", + type: "int64[]", + }, + ], + name: "wipeTokenAccountNFT", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export const HEDERA_PROXY_ABI = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DEFAULT_EXPIRY", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "MAX_INT", + outputs: [ + { + internalType: "int64", + name: "", + type: "int64", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "baseURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "baseUri", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256", + name: "serialNum", + type: "uint256", + }, + ], + name: "burnFor", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "int64", + name: "serialNum", + type: "int64", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "claimNft", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "data", + type: "uint256", + }, + ], + name: "decodeHts", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "int64", + name: "", + type: "int64", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "claimer", + type: "address", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getClaimableNfts", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "getTokenExpiryInfo", + outputs: [ + { + internalType: "int256", + name: "responseCode", + type: "int256", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiryInfo", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "grantTokenKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "htsToken", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "string", + name: "baseURI_", + type: "string", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "isKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + { + internalType: "bool", + name: "kycGranted", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "id", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "pauseToken", + outputs: [ + { + internalType: "int256", + name: "responseCode", + type: "int256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "revokeTokenKyc", + outputs: [ + { + internalType: "int64", + name: "responseCode", + type: "int64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_serialNum", + type: "uint256", + }, + ], + name: "safeTransferFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + ], + name: "unpauseToken", + outputs: [ + { + internalType: "int256", + name: "responseCode", + type: "int256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiryInfo", + type: "tuple", + }, + ], + name: "updateTokenExpiryInfo", + outputs: [ + { + internalType: "int256", + name: "responseCode", + type: "int256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "symbol", + type: "string", + }, + { + internalType: "address", + name: "treasury", + type: "address", + }, + { + internalType: "string", + name: "memo", + type: "string", + }, + { + internalType: "bool", + name: "tokenSupplyType", + type: "bool", + }, + { + internalType: "int64", + name: "maxSupply", + type: "int64", + }, + { + internalType: "bool", + name: "freezeDefault", + type: "bool", + }, + { + components: [ + { + internalType: "uint256", + name: "keyType", + type: "uint256", + }, + { + components: [ + { + internalType: "bool", + name: "inheritAccountKey", + type: "bool", + }, + { + internalType: "address", + name: "contractId", + type: "address", + }, + { + internalType: "bytes", + name: "ed25519", + type: "bytes", + }, + { + internalType: "bytes", + name: "ECDSA_secp256k1", + type: "bytes", + }, + { + internalType: "address", + name: "delegatableContractId", + type: "address", + }, + ], + internalType: "struct IHederaTokenService.KeyValue", + name: "key", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.TokenKey[]", + name: "tokenKeys", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint32", + name: "second", + type: "uint32", + }, + { + internalType: "address", + name: "autoRenewAccount", + type: "address", + }, + { + internalType: "uint32", + name: "autoRenewPeriod", + type: "uint32", + }, + ], + internalType: "struct IHederaTokenService.Expiry", + name: "expiry", + type: "tuple", + }, + ], + internalType: "struct IHederaTokenService.HederaToken", + name: "tokenInfo", + type: "tuple", + }, + ], + name: "updateTokenInfo", + outputs: [ + { + internalType: "int256", + name: "responseCode", + type: "int256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +]; +export const HEDERA_PROXY_BC = + "0x60806040523480156200001157600080fd5b506200001d336200012a565b6002602081815260017fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e09190915560047f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5560087f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35560107fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f557fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38455600660005260407f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b556200017a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6139ae806200018a6000396000f3fe60806040526004361061018b5760003560e01c80637ad43629116100d6578063a6487c531161007f578063d614cdb811610059578063d614cdb814610483578063f2c31ff4146104b1578063f2fde38b146104eb57600080fd5b8063a6487c5314610430578063af99c63314610443578063c87b56dd1461046357600080fd5b80638f8d7f99116100b05780638f8d7f99146103db57806394d008ef146103fb5780639abc83201461041b57600080fd5b80637ad436291461037d5780637c41ad2c1461039d5780638da5cb5b146103bd57600080fd5b80633b3bff0f11610138578063593d6e8211610112578063593d6e82146103265780636c0360eb14610346578063715018a61461036857600080fd5b80633b3bff0f146102ba57806342842e0e146102da57806351761bcc146102fa57600080fd5b80630e44263a116101695780630e44263a1461022557806318370d341461026a5780631dd319cb1461029857600080fd5b8063098d3228146101905780630b5d6cab146101c05780630bc14a69146101ed575b600080fd5b34801561019c57600080fd5b506101a863ffffffff81565b60405160079190910b81526020015b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004612151565b61050b565b6040516101b7919061218a565b3480156101f957600080fd5b5060045461020d906001600160a01b031681565b6040516001600160a01b0390911681526020016101b7565b34801561023157600080fd5b506102486102403660046121ce565b606081901c91565b604080516001600160a01b03909316835260079190910b6020830152016101b7565b34801561027657600080fd5b5061028a610285366004612581565b610545565b6040519081526020016101b7565b3480156102a457600080fd5b506102b86102b33660046126c9565b610622565b005b3480156102c657600080fd5b5061028a6102d53660046126f5565b610750565b3480156102e657600080fd5b506102b86102f5366004612712565b610843565b34801561030657600080fd5b506103116278645081565b60405163ffffffff90911681526020016101b7565b34801561033257600080fd5b5061028a610341366004612753565b6109e7565b34801561035257600080fd5b5061035b610a13565b6040516101b791906127e1565b34801561037457600080fd5b506102b8610a3b565b34801561038957600080fd5b506102b86103983660046127f4565b610a4f565b3480156103a957600080fd5b5061028a6103b83660046126f5565b610afe565b3480156103c957600080fd5b506000546001600160a01b031661020d565b3480156103e757600080fd5b506101a86103f6366004612151565b610b45565b34801561040757600080fd5b506102b8610416366004612812565b610b94565b34801561042757600080fd5b5061035b610d7c565b6102b861043e36600461289b565b610e0a565b34801561044f57600080fd5b506101a861045e366004612151565b6110c4565b34801561046f57600080fd5b5061035b61047e3660046121ce565b611113565b34801561048f57600080fd5b506104a361049e3660046126f5565b611188565b6040516101b7929190612923565b3480156104bd57600080fd5b506104d16104cc366004612151565b6112ab565b6040805160079390930b83529015156020830152016101b7565b3480156104f757600080fd5b506102b86105063660046126f5565b61138f565b6001600160a01b03808316600090815260056020908152604080832093851683529290522060609061053c9061141f565b90505b92915050565b60008060006101676001600160a01b03166318370d3460e01b8686604051602401610571929190612b21565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516105af9190612b4b565b6000604051808303816000865af19150503d80600081146105ec576040519150601f19603f3d011682016040523d82523d6000602084013e6105f1565b606091505b509150915081610602576015610616565b808060200190518101906106169190612b79565b60030b95945050505050565b61062a611433565b600454600090610645906001600160a01b031684308561148d565b9050601681146106548261158e565b6040516020016106649190612b94565b6040516020818303038152906040529061069a5760405162461bcd60e51b815260040161069191906127e1565b60405180910390fd5b506040805160018082528183019092526000916020808301908036833701905050905082816000815181106106d1576106d1612bff565b60079290920b602092830291909101909101526004546106fc906001600160a01b031660008361162e565b5091506016821461070c8361158e565b60405160200161071c9190612c15565b604051602081830303815290604052906107495760405162461bcd60e51b815260040161069191906127e1565b5050505050565b6040516001600160a01b038216602482015260009081908190610167907f3b3bff0f00000000000000000000000000000000000000000000000000000000906044015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516107d19190612b4b565b6000604051808303816000865af19150503d806000811461080e576040519150601f19603f3d011682016040523d82523d6000602084013e610813565b606091505b509150915081610824576015610838565b808060200190518101906108389190612b79565b60030b949350505050565b61084b611433565b606081901c60008181526006602052604081205483919060ff166108ef576108733084611717565b90506016811480610884575060c281145b61088d8261158e565b60405160200161089d9190612c66565b604051602081830303815290604052906108ca5760405162461bcd60e51b815260040161069191906127e1565b506001600160a01b0383166000908152600660205260409020805460ff191660011790555b6000546001600160a01b03166001600160a01b0316856001600160a01b0316036109265761091f8387308561148d565b905061099d565b6000546001600160a01b03166001600160a01b0316866001600160a01b03160361099d576109568330878561148d565b905060b719810161099d576001600160a01b03808616600090815260056020908152604080832093871683529290522061099490600784900b611766565b50505050505050565b601681146109aa8261158e565b6040516020016109ba9190612b94565b604051602081830303815290604052906109945760405162461bcd60e51b815260040161069191906127e1565b60008060006101676001600160a01b031663593d6e8260e01b8686604051602401610571929190612cd1565b60606003604051602001610a279190612de7565b604051602081830303815290604052905090565b610a43611433565b610a4d6000611772565b565b3360009081526005602090815260408083206001600160a01b03851684529091529020610a868167ffffffffffffffff85166117cf565b610ad25760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420636c61696d2074686973206e667400000000000000000000006044820152606401610691565b6000610adf3385856117db565b905060168114610aee8261158e565b60405160200161071c9190612b94565b6040516001600160a01b038216602482015260009081908190610167907f7c41ad2c0000000000000000000000000000000000000000000000000000000090604401610793565b6040516001600160a01b0383811660248301528216604482015260009081908190610167907f8f8d7f990000000000000000000000000000000000000000000000000000000090606401610571565b610b9c611433565b604080516001808252818301909252600091816020015b6060815260200190600190039081610bb35790505090506003610bd58561158e565b604051602001610be6929190612e20565b60405160208183030381529060405281600081518110610c0857610c08612bff565b60209081029190910101526004546000908190610c2f906001600160a01b031682856117f3565b9250509150601660030b8214610c448361158e565b604051602001610c549190612e45565b60405160208183030381529060405290610c815760405162461bcd60e51b815260040161069191906127e1565b506000610cb78883600081518110610c9b57610c9b612bff565b60209081029190910101516004546001600160a01b03166117db565b905060b7198101610d2657610d1c82600081518110610cd857610cd8612bff565b6020908102919091018101516001600160a01b03808c1660009081526005845260408082206004549093168252919093529091209067ffffffffffffffff16611766565b5050505050610d76565b60168114610d338461158e565b604051602001610d439190612b94565b60405160208183030381529060405290610d705760405162461bcd60e51b815260040161069191906127e1565b50505050505b50505050565b60038054610d8990612d14565b80601f0160208091040260200160405190810160405280929190818152602001828054610db590612d14565b8015610e025780601f10610dd757610100808354040283529160200191610e02565b820191906000526020600020905b815481529060010190602001808311610de557829003601f168201915b505050505081565b600454600160a01b900460ff1615610e645760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610691565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790558051610ea5906003906020840190612036565b50604080516001808252818301909252600091816020015b610ec56120ba565b815260200190600190039081610ebd579050509050610ee760046001306118f1565b81600081518110610efa57610efa612bff565b6020026020010181905250610f6b60408051610120810182526060808252602080830182905260008385018190528284018390526080840181905260a0840181905260c0840181905260e0840183905284519283018552808352908201819052928101929092529061010082015290565b84815260208082018590523060408084018290528051808401825260008082526060808701929092526001608087015263ffffffff60a087015260c0860181905260e08601879052825191820183528152928301919091526278645090820152610100820152600080610fdd83611926565b909250905060168214610fef8361158e565b604051602001610fff9190612e89565b6040516020818303038152906040529061102c5760405162461bcd60e51b815260040161069191906127e1565b506110373082611717565b91506016821480611048575060c282145b6110518361158e565b6040516020016110619190612c66565b6040516020818303038152906040529061108e5760405162461bcd60e51b815260040161069191906127e1565b506004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055505050505050565b6040516001600160a01b0383811660248301528216604482015260009081908190610167907faf99c6330000000000000000000000000000000000000000000000000000000090606401610571565b606081811c826000806111268484611a3c565b90925090506016821461117b5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2067657420746f6b656e20696e666f00000000000000006044820152606401610691565b6080015195945050505050565b604080516060810182526000808252602080830182905282840182905283516001600160a01b038616602480830191909152855180830390910181526044909101855290810180516001600160e01b03167fd614cdb8000000000000000000000000000000000000000000000000000000001790529251909283918291610167916112139190612b4b565b6000604051808303816000865af19150503d8060008114611250576040519150601f19603f3d011682016040523d82523d6000602084013e611255565b606091505b50604080516060810182526000808252602082018190529181019190915291935091508261128557601581611299565b818060200190518101906112999190612f49565b60039190910b97909650945050505050565b604080516001600160a01b038481166024830152831660448083019190915282518083039091018152606490910182526020810180516001600160e01b03167ff2c31ff40000000000000000000000000000000000000000000000000000000017905290516000918291829182916101679161132691612b4b565b6000604051808303816000865af19150503d8060008114611363576040519150601f19603f3d011682016040523d82523d6000602084013e611368565b606091505b50915091508161137b5760156000611299565b808060200190518101906112999190612f7f565b611397611433565b6001600160a01b0381166114135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610691565b61141c81611772565b50565b6060600061142c83611cd6565b9392505050565b6000546001600160a01b03163314610a4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610691565b604080516001600160a01b038681166024830152858116604483015284166064820152600783900b6084808301919091528251808303909101815260a490910182526020810180516001600160e01b03167f5cfc901100000000000000000000000000000000000000000000000000000000179052905160009182918291610167916115199190612b4b565b6000604051808303816000865af19150503d8060008114611556576040519150601f19603f3d011682016040523d82523d6000602084013e61155b565b606091505b50915091508161156c576015611580565b808060200190518101906115809190612b79565b60030b979650505050505050565b6060600061159b83611d32565b600101905060008167ffffffffffffffff8111156115bb576115bb6121e7565b6040519080825280601f01601f1916602001820160405280156115e5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ef57509392505050565b6000806000806101676001600160a01b031663acb9cff960e01b88888860405160240161165d93929190612fab565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161169b9190612b4b565b6000604051808303816000865af19150503d80600081146116d8576040519150601f19603f3d011682016040523d82523d6000602084013e6116dd565b606091505b5091509150816116f05760156000611704565b80806020019051810190611704919061302e565b60039190910b9890975095505050505050565b6040516001600160a01b0383811660248301528216604482015260009081908190610167907f49146bde0000000000000000000000000000000000000000000000000000000090606401610571565b600061053c8383611e14565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061053c8383611e63565b6000806117ea8330878761148d565b95945050505050565b60008060606000806101676001600160a01b031663278e0b8860e01b89898960405160240161182493929190613058565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516118629190612b4b565b6000604051808303816000865af19150503d806000811461189f576040519150601f19603f3d011682016040523d82523d6000602084013e6118a4565b606091505b5091509150816118c75760408051600080825260208201909252601591906118db565b808060200190518101906118db91906130e7565b60039290920b9a90995090975095505050505050565b6118f96120ba565b604051806040016040528061190d86611f56565b815260200161191c8585611f95565b9052949350505050565b600080828061010001516000015163ffffffff16600014801561195657506101008101516040015163ffffffff16155b1561196c576101008101516276a7006040909101525b6000806101676001600160a01b031634639c89bb3560e01b8860405160240161199591906131a4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516119d39190612b4b565b60006040518083038185875af1925050503d8060008114611a10576040519150601f19603f3d011682016040523d82523d6000602084013e611a15565b606091505b509150915081611a285760156000611299565b8080602001905181019061129991906131b7565b604080516103008101825260606101e082018181526102008301829052600061022084018190526102408401839052610260840181905261028084018190526102a084018190526102c084018390528451808401865281815260208082018390528187018390526102e086019190915260c0850192835260e08501829052610100850182905261012085018290526101408501829052610160850184905261018085018490526101a085018490526101c08501849052918452908301819052928201839052808201839052608082015260a08101829052604080516001600160a01b0386166024820152600785900b60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167f287e1da8000000000000000000000000000000000000000000000000000000001790529051600091829161016791611b8c91612b4b565b6000604051808303816000865af19150503d8060008114611bc9576040519150601f19603f3d011682016040523d82523d6000602084013e611bce565b606091505b5091509150611cb5604080516103008101825260606101e082018181526102008301829052600061022084018190526102408401839052610260840181905261028084018190526102a084018190526102c0840183905284518084018652818152602081018290529485018190526102e084019490945260c0830190815260e0830184905261010083018490526101208301849052610140830193909352610160820181905261018082018190526101a082018190526101c08201529081908152600060208201819052604082018190526060808301829052608083015260a09091015290565b82611cc257601581611704565b81806020019051810190611704919061383f565b606081600001805480602002602001604051908101604052809291908181526020018280548015611d2657602002820191906000526020600020905b815481526020019060010190808311611d12575b50505050509050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d7b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611da7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611dc557662386f26fc10000830492506010015b6305f5e1008310611ddd576305f5e100830492506008015b6127108310611df157612710830492506004015b60648310611e03576064830492506002015b600a831061053f5760010192915050565b6000818152600183016020526040812054611e5b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561053f565b50600061053f565b60008181526001830160205260408120548015611f4c576000611e87600183613927565b8554909150600090611e9b90600190613927565b9050818114611f00576000866000018281548110611ebb57611ebb612bff565b9060005260206000200154905080876000018481548110611ede57611ede612bff565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f1157611f1161394c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061053f565b600091505061053f565b600060026000836006811115611f6e57611f6e613962565b6006811115611f7f57611f7f613962565b8152602001908152602001600020549050919050565b611fdb6040518060a0016040528060001515815260200160006001600160a01b03168152602001606081526020016060815260200160006001600160a01b031681525090565b6001836004811115611fef57611fef613962565b03612008576001600160a01b038216602082015261053f565b600483600481111561201c5761201c613962565b0361053f576001600160a01b038216608082015292915050565b82805461204290612d14565b90600052602060002090601f01602090048101928261206457600085556120aa565b82601f1061207d57805160ff19168380011785556120aa565b828001600101855582156120aa579182015b828111156120aa57825182559160200191906001019061208f565b506120b6929150612117565b5090565b6040518060400160405280600081526020016121126040518060a0016040528060001515815260200160006001600160a01b03168152602001606081526020016060815260200160006001600160a01b031681525090565b905290565b5b808211156120b65760008155600101612118565b6001600160a01b038116811461141c57600080fd5b803561214c8161212c565b919050565b6000806040838503121561216457600080fd5b823561216f8161212c565b9150602083013561217f8161212c565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156121c2578351835292840192918401916001016121a6565b50909695505050505050565b6000602082840312156121e057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612220576122206121e7565b60405290565b60405160a0810167ffffffffffffffff81118282101715612220576122206121e7565b6040516060810167ffffffffffffffff81118282101715612220576122206121e7565b604051610120810167ffffffffffffffff81118282101715612220576122206121e7565b60405160c0810167ffffffffffffffff81118282101715612220576122206121e7565b604051601f8201601f1916810167ffffffffffffffff811182821017156122dc576122dc6121e7565b604052919050565b600067ffffffffffffffff8211156122fe576122fe6121e7565b50601f01601f191660200190565b600082601f83011261231d57600080fd5b813561233061232b826122e4565b6122b3565b81815284602083860101111561234557600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461141c57600080fd5b803561214c81612362565b8060070b811461141c57600080fd5b803561214c8161237b565b600067ffffffffffffffff8211156123af576123af6121e7565b5060051b60200190565b600082601f8301126123ca57600080fd5b813560206123da61232b83612395565b82815260059290921b840181019181810190868411156123f957600080fd5b8286015b8481101561250f57803567ffffffffffffffff8082111561241d57600080fd5b908801906040601f19838c03810182131561243757600080fd5b61243f6121fd565b888501358152828501358481111561245657600080fd5b949094019360a0858e038301121561246e5760008081fd5b612476612226565b91508885013561248581612362565b8252848301356124948161212c565b828a0152606085810135858111156124ac5760008081fd5b6124ba8f8c838a010161230c565b85850152506080935083860135858111156124d55760008081fd5b6124e38f8c838a010161230c565b8285015250506124f560a08601612141565b9282019290925281880152855250509183019183016123fd565b509695505050505050565b63ffffffff8116811461141c57600080fd5b60006060828403121561253e57600080fd5b612546612249565b905081356125538161251a565b815260208201356125638161212c565b602082015260408201356125768161251a565b604082015292915050565b6000806040838503121561259457600080fd5b823561259f8161212c565b9150602083013567ffffffffffffffff808211156125bc57600080fd5b9084019061016082870312156125d157600080fd5b6125d961226c565b8235828111156125e857600080fd5b6125f48882860161230c565b82525060208301358281111561260957600080fd5b6126158882860161230c565b60208301525061262760408401612141565b604082015260608301358281111561263e57600080fd5b61264a8882860161230c565b60608301525061265c60808401612370565b608082015261266d60a0840161238a565b60a082015261267e60c08401612370565b60c082015260e08301358281111561269557600080fd5b6126a1888286016123b9565b60e08301525061010091506126b88783850161252c565b828201528093505050509250929050565b600080604083850312156126dc57600080fd5b82356126e78161212c565b946020939093013593505050565b60006020828403121561270757600080fd5b813561142c8161212c565b60008060006060848603121561272757600080fd5b83356127328161212c565b925060208401356127428161212c565b929592945050506040919091013590565b6000806080838503121561276657600080fd5b82356127718161212c565b9150612780846020850161252c565b90509250929050565b60005b838110156127a457818101518382015260200161278c565b83811115610d765750506000910152565b600081518084526127cd816020860160208601612789565b601f01601f19169290920160200192915050565b60208152600061053c60208301846127b5565b6000806040838503121561280757600080fd5b823561216f8161237b565b6000806000806060858703121561282857600080fd5b84356128338161212c565b935060208501359250604085013567ffffffffffffffff8082111561285757600080fd5b818701915087601f83011261286b57600080fd5b81358181111561287a57600080fd5b88602082850101111561288c57600080fd5b95989497505060200194505050565b6000806000606084860312156128b057600080fd5b833567ffffffffffffffff808211156128c857600080fd5b6128d48783880161230c565b945060208601359150808211156128ea57600080fd5b6128f68783880161230c565b9350604086013591508082111561290c57600080fd5b506129198682870161230c565b9150509250925092565b8281526080810161142c6020830184805163ffffffff90811683526020808301516001600160a01b03169084015260409182015116910152565b600081518084526020808501808196508360051b8101915082860160005b85811015612a145782840389528151604081518652868201519150808787015281511515818701528682015160606001600160a01b03808316828a015283850151935060a09250608083818b01526129d660e08b01866127b5565b928601518a8403603f1901858c01529294506129f285846127b5565b9501511660c0989098019790975250509885019893509084019060010161297b565b5091979650505050505050565b60006101608251818552612a37828601826127b5565b91505060208301518482036020860152612a5182826127b5565b9150506040830151612a6e60408601826001600160a01b03169052565b5060608301518482036060860152612a8682826127b5565b9150506080830151612a9c608086018215159052565b5060a0830151612ab160a086018260070b9052565b5060c0830151612ac560c086018215159052565b5060e083015184820360e0860152612add828261295d565b61010085810151805163ffffffff9081168984015260208201516001600160a01b03166101208a015260408201511661014089015291935091505090949350505050565b6001600160a01b0383168152604060208201526000612b436040830184612a21565b949350505050565b60008251612b5d818460208701612789565b9190910192915050565b8051600381900b811461214c57600080fd5b600060208284031215612b8b57600080fd5b61053c82612b67565b7f4661696c656420746f207472616e7366657220746f6b656e2e20526561736f6e81527f20436f64653a2000000000000000000000000000000000000000000000000000602082015260008251612bf2816027850160208701612789565b9190910160270192915050565b634e487b7160e01b600052603260045260246000fd5b7f4661696c656420746f206275726e20746f6b656e2e20526561736f6e20436f648152620329d160ed1b602082015260008251612c59816023850160208701612789565b9190910160230192915050565b7f4661696c656420746f206173736f636961746520746f6b656e2e20526561736f81527f6e20436f64653a20000000000000000000000000000000000000000000000000602082015260008251612cc4816028850160208701612789565b9190910160280192915050565b6001600160a01b03831681526080810161142c6020830184805163ffffffff90811683526020808301516001600160a01b03169084015260409182015116910152565b600181811c90821680612d2857607f821691505b602082108103612d4857634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c9080831680612d6857607f831692505b60208084108203612d8957634e487b7160e01b600052602260045260246000fd5b818015612d9d5760018114612dae57612ddb565b60ff19861689528489019650612ddb565b60008881526020902060005b86811015612dd35781548b820152908501908301612dba565b505084890196505b50505050505092915050565b6000612df38284612d4e565b7f7b69647d0000000000000000000000000000000000000000000000000000000081526004019392505050565b6000612e2c8285612d4e565b8351612e3c818360208801612789565b01949350505050565b7f4661696c656420746f206d696e7420746f6b656e2e20526561736f6e20436f648152620329d160ed1b602082015260008251612c59816023850160208701612789565b7f4661696c656420746f2063726561746520746f6b656e2e20526561736f6e204381527f6f64653a20000000000000000000000000000000000000000000000000000000602082015260008251612ee7816025850160208701612789565b9190910160250192915050565b805161214c8161212c565b600060608284031215612f1157600080fd5b612f19612249565b90508151612f268161251a565b81526020820151612f368161212c565b602082015260408201516125768161251a565b60008060808385031215612f5c57600080fd5b612f6583612b67565b91506127808460208501612eff565b805161214c81612362565b60008060408385031215612f9257600080fd5b612f9b83612b67565b9150602083015161217f81612362565b6000606082016001600160a01b0386168352602067ffffffffffffffff86168185015260606040850152818551808452608086019150828701935060005b8181101561300857845160070b83529383019391830191600101612fe9565b509098975050505050505050565b805167ffffffffffffffff8116811461214c57600080fd5b6000806040838503121561304157600080fd5b61304a83612b67565b915061278060208401613016565b6000606082016001600160a01b0386168352602067ffffffffffffffff8616818501526060604085015281855180845260808601915060808160051b870101935082870160005b828110156130cd57607f198887030184526130bb8683516127b5565b9550928401929084019060010161309f565b50939998505050505050505050565b805161214c8161237b565b6000806000606084860312156130fc57600080fd5b61310584612b67565b92506020613114818601613016565b9250604085015167ffffffffffffffff81111561313057600080fd5b8501601f8101871361314157600080fd5b805161314f61232b82612395565b81815260059190911b8201830190838101908983111561316e57600080fd5b928401925b828410156131955783516131868161237b565b82529284019290840190613173565b80955050505050509250925092565b60208152600061053c6020830184612a21565b600080604083850312156131ca57600080fd5b6131d383612b67565b9150602083015161217f8161212c565b600082601f8301126131f457600080fd5b815161320261232b826122e4565b81815284602083860101111561321757600080fd5b612b43826020830160208701612789565b600082601f83011261323957600080fd5b8151602061324961232b83612395565b82815260059290921b8401810191818101908684111561326857600080fd5b8286015b8481101561250f57805167ffffffffffffffff8082111561328c57600080fd5b908801906040601f19838c0381018213156132a657600080fd5b6132ae6121fd565b88850151815282850151848111156132c557600080fd5b949094019360a0858e03830112156132dd5760008081fd5b6132e5612226565b9150888501516132f481612362565b8252848301516133038161212c565b828a01526060858101518581111561331b5760008081fd5b6133298f8c838a01016131e3565b85850152506080935083860151858111156133445760008081fd5b6133528f8c838a01016131e3565b82850152505061336460a08601612ef4565b92820192909252818801528552505091830191830161326c565b6000610160828403121561339157600080fd5b61339961226c565b9050815167ffffffffffffffff808211156133b357600080fd5b6133bf858386016131e3565b835260208401519150808211156133d557600080fd5b6133e1858386016131e3565b60208401526133f260408501612ef4565b6040840152606084015191508082111561340b57600080fd5b613417858386016131e3565b606084015261342860808501612f74565b608084015261343960a085016130dc565b60a084015261344a60c08501612f74565b60c084015260e084015191508082111561346357600080fd5b5061347084828501613228565b60e08301525061010061348584828501612eff565b9082015292915050565b600082601f8301126134a057600080fd5b815160206134b061232b83612395565b82815260a092830285018201928282019190878511156134cf57600080fd5b8387015b858110156135575781818a0312156134eb5760008081fd5b6134f3612226565b81516134fe8161251a565b81528186015161350d8161212c565b8187015260408281015161352081612362565b9082015260608281015161353381612362565b908201526080828101516135468161212c565b9082015284529284019281016134d3565b5090979650505050505050565b600082601f83011261357557600080fd5b8151602061358561232b83612395565b82815260c092830285018201928282019190878511156135a457600080fd5b8387015b858110156135575781818a0312156135c05760008081fd5b6135c8612290565b81516135d38161251a565b8152818601516135e28161251a565b818701526040828101516135f58161251a565b908201526060828101516136088161251a565b9082015260808281015161361b81612362565b9082015260a08281015161362e8161212c565b9082015284529284019281016135a8565b600082601f83011261365057600080fd5b8151602061366061232b83612395565b82815260c0928302850182019282820191908785111561367f57600080fd5b8387015b858110156135575781818a03121561369b5760008081fd5b6136a3612290565b81516136ae8161251a565b8152818601516136bd8161251a565b818701526040828101516136d08161251a565b908201526060828101516136e38161212c565b908201526080828101516136f681612362565b9082015260a0828101516137098161212c565b908201528452928401928101613683565b6000610120828403121561372d57600080fd5b61373561226c565b9050815167ffffffffffffffff8082111561374f57600080fd5b61375b8583860161337e565b835261376960208501613016565b602084015261377a60408501612f74565b604084015261378b60608501612f74565b606084015261379c60808501612f74565b608084015260a08401519150808211156137b557600080fd5b6137c18583860161348f565b60a084015260c08401519150808211156137da57600080fd5b6137e685838601613564565b60c084015260e08401519150808211156137ff57600080fd5b61380b8583860161363f565b60e08401526101009150818401518181111561382657600080fd5b613832868287016131e3565b8385015250505092915050565b6000806040838503121561385257600080fd5b61385b83612b67565b9150602083015167ffffffffffffffff8082111561387857600080fd5b9084019060c0828703121561388c57600080fd5b613894612290565b8251828111156138a357600080fd5b6138af8882860161371a565b8252506138be602084016130dc565b60208201526138cf60408401612ef4565b60408201526138e0606084016130dc565b60608201526080830151828111156138f757600080fd5b613903888286016131e3565b60808301525061391560a08401612ef4565b60a08201528093505050509250929050565b60008282101561394757634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e1b02e0bf680edea825c84ca65bf0ac5d3bfe871cf62d7c156601f94d116e29764736f6c634300080d0033"; diff --git a/src/helpers/hedera/index.ts b/src/helpers/hedera/index.ts new file mode 100644 index 000000000..c0e28b8f6 --- /dev/null +++ b/src/helpers/hedera/index.ts @@ -0,0 +1,772 @@ +/** + * Web3 Implementation for cross chain traits + * @module + */ +/* tslint:disable:no-unused-variable */ +import BigNumber from "bignumber.js"; +import { + BalanceCheck, + EstimateTxFeesBatch, + FeeMargins, + GetFeeMargins, + GetProvider, + IsContractAddress, + MintNft, + TransferNftForeign, + TransferNftForeignBatch, + UnfreezeForeignNft, + UnfreezeForeignNftBatch, + ParamsGetter, +} from "../chain"; +import { + BigNumber as EthBN, + ContractTransaction, + ethers, + PopulatedTransaction, + providers, + Signer, + Wallet, +} from "ethers"; +import { Provider, TransactionResponse } from "@ethersproject/providers"; +import { + Erc1155Minter, + Erc1155Minter__factory, + Minter__factory, + UserNftMinter, + UserNftMinter__factory, +} from "xpnet-web3-contracts"; +import { + ChainNonceGet, + EstimateTxFees, + ExtractAction, + ExtractTxnStatus, + GetTokenURI, + NftInfo, + PreTransfer, + TransactionStatus, + ValidateAddress, + WhitelistCheck, +} from "../../"; +import { ChainNonce } from "../../type-utils"; +import { EvNotifier } from "../../notifier"; +import axios from "axios"; + +import { + Signer as HSigner, + //ContractCallQuery, + //ContractId, + //ContractFunctionParameters, + //Hbar, + //ContractExecuteTransaction, +} from "@hashgraph/sdk"; +//import { sign } from "crypto"; + +type HSDK = typeof import("@hashgraph/sdk"); +let hashSDK: HSDK; + +/** + * Information required to perform NFT transfers in this chain + */ +export type EthNftInfo = { + chainId: string; + tokenId: string; + owner: string; + uri: string; + contract: string; + contractType: "ERC721" | "ERC1155"; +}; + +/** + * Arguments required for minting a new nft + * + * contract: address of the sc + * token: token ID of the newly minted nft + * owner: Owner of the newly minted nft + * uri: uri of the nft + */ +export type MintArgs = { + contract: string; + uri: string; + walletNonce?: number; +}; + +export interface IsApproved<_> { + isApprovedForMinter( + address: NftInfo, + sender: HSigner, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +export interface Approve<_> { + approveForMinter( + address: NftInfo, + sender: HSigner, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +/*hethers.providers.BaseProvider.prototype.getGasPrice = async () => { + return EthBN.from("1"); +};*/ + +//type NullableCustomData = Record | undefined; + +/** + * Base util traits + */ +export type BaseWeb3Helper = BalanceCheck & + /** + * Mint an nft in the given ERC1155 smart contract + * + * @argument signer owner of the smart contract + * @argument args See [[MintArgs]] + */ MintNft & { + /** + * Deploy an ERC721 smart contract + * + * @argument owner Owner of this smart contract + * @returns Address of the deployed smart contract + */ + deployErc721(owner: Signer): Promise; + } & { + mintNftErc1155( + owner: Signer, + options: MintArgs + ): Promise; + }; + +type ExtraArgs = { gasPrice: ethers.BigNumber }; + +/** + * Traits implemented by this module + */ +export type Web3Helper = BaseWeb3Helper & + TransferNftForeign & + UnfreezeForeignNft & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & + EstimateTxFees & + EstimateTxFeesBatch & + ChainNonceGet & + IsApproved & + Approve & + ValidateAddress & + ExtractAction & { + createWallet(privateKey: string): Wallet; + } & Pick, "preTransfer"> & + ExtractTxnStatus & + GetProvider & { + XpNft: string; + XpNft1155: string; + } & WhitelistCheck & + GetFeeMargins & + IsContractAddress & + GetTokenURI & + ParamsGetter & { + injectSDK(sdk: HSDK): void; + }; + +/** + * Create an object implementing minimal utilities for a web3 chain + * + * @param provider An ethers.js provider object + */ +export async function baseWeb3HelperFactory( + provider: Provider, + nonce: number +): Promise { + const w3 = provider; + + return { + async balance(address: string): Promise { + const bal = await w3.getBalance(address); + + // ethers BigNumber is not compatible with our bignumber + return new BigNumber(bal.toString()); + }, + async deployErc721(owner: Signer): Promise { + const factory = new UserNftMinter__factory(owner); + const contract = await factory.deploy(); + + return contract.address; + }, + async mintNftErc1155(owner: Signer, { contract }) { + const erc1155 = Erc1155Minter__factory.connect(contract!, owner); + const tx = await erc1155.mintNft(await owner.getAddress()); + + return tx; + }, + async mintNft( + owner: Signer, + { contract, uri, walletNonce }: MintArgs + ): Promise { + const erc721 = UserNftMinter__factory.connect(contract!, owner); + const txm = await erc721 + .mint(uri, { + gasLimit: 1000000, + ...(walletNonce ? { nonce: walletNonce } : {}), + }) + .catch(async (e) => { + if (nonce === 33) { + let tx; + while (!tx) { + tx = await provider.getTransaction(e["returnedHash"]); + } + return tx; + } + throw e; + }); + return txm; + }, + }; +} + +/** + * Create an object implementing cross chain utilities for a web3 chain + * + * @param provider An ethers.js provider object + * @param minter_addr Address of the minter smart contract + * @param minter_abi ABI of the minter smart contract + */ +export interface Web3Params { + provider: Provider; + notifier: EvNotifier; + minter_addr: string; + erc721_addr: string; + erc1155_addr: string; + erc721Minter: string; + erc1155Minter: string; + nonce: ChainNonce; + feeMargin: FeeMargins; +} + +type NftMethodVal<_, Tx> = { + freeze: "freezeErc1155" | "freezeErc721"; + validateUnfreeze: "validateUnfreezeErc1155" | "validateUnfreezeErc721"; + umt: typeof Erc1155Minter__factory | typeof UserNftMinter__factory; + approved: ( + contract: string, + signer: HSigner, + minterAddr: string, + tok: string + ) => Promise; + approve: ( + constract: string, + forAddr: string, + tok: string, + signer: HSigner + ) => Promise; +}; + +type EthNftMethodVal = NftMethodVal; + +type NftMethodMap = Record< + "ERC1155" | "ERC721", + EthNftMethodVal | EthNftMethodVal +>; + +export const NFT_METHOD_MAP: NftMethodMap = { + ERC1155: { + freeze: "freezeErc1155", + validateUnfreeze: "validateUnfreezeErc1155", + umt: Erc1155Minter__factory, + approved: async (_tok: string) => { + /*return umt.isApprovedForAll(sender, minterAddr, { + gasLimit: "85000", + customData, + });*/ + return true; + }, + approve: async () => { + /*const tx = await umt.populateTransaction.setApprovalForAll( + forAddr, + true, + { + gasLimit: "85000", + customData, + } + ); + await txnUp(tx); + return await umt.signer.sendTransaction(tx);*/ + return null; + }, + }, + ERC721: { + freeze: "freezeErc721", + validateUnfreeze: "validateUnfreezeErc721", + umt: UserNftMinter__factory, + approved: async ( + contract: string, + signer: HSigner, + minterAddr: string, + tok: string + ) => { + //console.log(hashSDK.ContractCallQuery, " dsa"); + // signer. + //const cl = hashSDK.Client.forTestnet(); + //cl.setDefaultMaxTransactionFee(new hashSDK.Hbar(20)); + //cl.setOperatorWith() + //cl.setOperatorWith(signer.getAccountId(), signer.get) + + //client.setDefaultMaxTransactionFee(new Hbar(20)); + + const x = await new hashSDK.ContractCallQuery() + .setContractId(hashSDK.ContractId.fromSolidityAddress(contract)) + //.setMaxQueryPayment(new hashSDK.Hbar(10)) + .setGas(50_000) + //.setQueryPayment(new hashSDK.Hbar(8)) + .setFunction( + "getApproved", + new hashSDK.ContractFunctionParameters().addUint256(Number(tok)) + ); + + const txResponse = await x.executeWithSigner(signer); + + return ( + txResponse?.getString(0)?.toLowerCase() == minterAddr.toLowerCase() + ); + }, + approve: async ( + contract: string, + forAddr: string, + tok: string, + signer: HSigner + ) => { + const transaction = await new hashSDK.ContractExecuteTransaction() + .setContractId(hashSDK.ContractId.fromSolidityAddress(contract)) + .setGas(50_000) + //.setMaxTransactionFee(new hashSDK.Hbar(10)) + .setPayableAmount(new hashSDK.Hbar(5)) + .setFunction( + "approve", + new hashSDK.ContractFunctionParameters() + .addAddress(forAddr) + .addUint256(Number(tok)) + ) + .freezeWithSigner(signer); + + //Sign with the client operator private key to pay for the transaction and submit the query to a Hedera network + const txResponse = await (await transaction).executeWithSigner(signer); + console.log(txResponse, "x"); + const receipt = await txResponse.getReceiptWithSigner(signer); + + console.log(receipt, txResponse.transactionId); + return null; + }, + }, +}; + +export async function web3HelperFactory( + params: Web3Params +): Promise { + const txnUnderpricedPolyWorkaround = + params.nonce == 7 + ? async (utx: PopulatedTransaction) => { + const res = await axios + .get( + "https://gpoly.blockscan.com/gasapi.ashx?apikey=key&method=pendingpooltxgweidata" + ) + .catch(async () => { + return await axios.get( + "https://gasstation-mainnet.matic.network/v2" + ); + }); + const { result, fast } = res.data; + const trackerGas = result?.rapidgaspricegwei || fast?.maxFee; + + if (trackerGas) { + const sixtyGwei = ethers.utils.parseUnits( + Math.ceil(trackerGas).toString(), + "gwei" + ); + utx.maxFeePerGas = sixtyGwei; + utx.maxPriorityFeePerGas = sixtyGwei; + } + } + : () => Promise.resolve(); + + const w3 = params.provider; + + const { minter_addr, provider } = params; + const minter = Minter__factory.connect(minter_addr, provider); + + async function notifyValidator( + fromHash: string, + actionId?: string, + type?: string, + toChain?: number, + txFees?: string, + senderAddress?: string, + targetAddress?: string, + nftUri?: string, + tokenId?: string, + contract?: string + ): Promise { + await params.notifier.notifyWeb3( + params.nonce, + fromHash, + actionId, + type, + toChain, + txFees, + senderAddress, + targetAddress, + nftUri, + tokenId, + contract + ); + } + + //@ts-ignore + async function getTransaction(hash: string) { + let trx; + let fails = 0; + while (!trx && fails < 7) { + trx = await provider.getTransaction(hash); + await new Promise((resolve) => + setTimeout(() => resolve("wait"), 5000 + fails * 2) + ); + fails++; + } + + return trx as TransactionResponse; + } + + async function extractAction(txr: TransactionResponse): Promise { + const receipt = await txr.wait(); + const log = receipt.logs.find((log) => log.address === minter.address); + if (log === undefined) { + throw Error("Couldn't extract action_id"); + } + + const evdat = minter.interface.parseLog(log); + const action_id: string = evdat.args[0].toString(); + return action_id; + } + + const isApprovedForMinter = async ( + id: NftInfo, + signer: HSigner + ) => { + return await NFT_METHOD_MAP[id.native.contractType].approved( + id.native.contract, + signer, + params.erc721_addr, + id.native.tokenId + ); + }; + + const approveForMinter = async ( + id: NftInfo, + sender: HSigner, + _txFees: BigNumber + ) => { + const isApproved = await isApprovedForMinter(id, sender); + if (isApproved) { + return undefined; + } + /* const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + sender + );*/ + + const toApprove = params.erc721_addr; + + await NFT_METHOD_MAP[id.native.contractType].approve( + id.native.contract, + toApprove, + id.native.tokenId, + sender + ); + return ""; + }; + + const base = await baseWeb3HelperFactory(params.provider, params.nonce); + + return { + ...base, + XpNft: params.erc721_addr, + XpNft1155: params.erc1155_addr, + injectSDK(sdk) { + hashSDK = sdk; + }, + getParams: () => params, + approveForMinter, + getProvider: () => provider, + async estimateValidateUnfreezeNft(_to, _id, _mW) { + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + }, + getFeeMargin() { + return params.feeMargin; + }, + isApprovedForMinter, + preTransfer: (s: any, id, fee) => approveForMinter(id, s, fee), + extractAction, + async isContractAddress(address) { + const code = await provider.getCode(address); + return code !== "0x"; + }, + getNonce: () => params.nonce, + + async extractTxnStatus(txn) { + const status = (await (await provider.getTransaction(txn)).wait()).status; + if (status === undefined) { + return TransactionStatus.PENDING; + } + if (status === 1) { + return TransactionStatus.SUCCESS; + } else if (status === 0) { + return TransactionStatus.FAILURE; + } + return TransactionStatus.UNKNOWN; + }, + async getTokenURI(contract, tokenId) { + if (ethers.utils.isAddress(contract) && tokenId) { + const erc721 = UserNftMinter__factory.connect(contract!, provider); + //const erc1155 = Erc1155Minter__factory.connect(contract!, provider) + //erc1155.uri() + return await erc721.tokenURI(tokenId).catch(() => ""); + } + return ""; + }, + async unfreezeWrappedNftBatch(signer, chainNonce, to, nfts, txFees) { + const tx = await minter + .connect(signer) + .populateTransaction.withdrawNftBatch( + to, + chainNonce, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + nfts[0].native.contract, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + const res = await signer.sendTransaction(tx); + + // await notifyValidator( + // res.hash, + // await extractAction(res), + // "Unfreeze", + // chainNonce.toString(), + // txFees.toString(), + // await signer.getAddress(), + // to, + // res.data + // ); + await notifyValidator(res.hash); + + return res; + }, + async transferNftBatchToForeign( + signer, + chainNonce, + to, + nfts, + mintWith, + txFees + ) { + const tx = await minter + .connect(signer) + .populateTransaction.freezeErc1155Batch( + nfts[0].native.contract, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + chainNonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const res = await signer.sendTransaction(tx); + + await notifyValidator(res.hash); + + return res; + }, + async estimateValidateTransferNftBatch(_to, nfts, _mintWith) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + async estimateValidateUnfreezeNftBatch(_to, nfts) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + createWallet(privateKey: string): Wallet { + return new Wallet(privateKey, provider); + }, + async transferNftToForeign( + sender: any, + chain_nonce: number, + to: string, + id: NftInfo, + txFees: BigNumber, + mintWith: string, + gasLimit: ethers.BigNumberish | undefined = undefined, + gasPrice + ): Promise { + await approveForMinter(id, sender, txFees); + const method = NFT_METHOD_MAP[id.native.contractType].freeze; + + // Chain is Hedera + if (params.nonce === 0x1d) { + id.native.tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [id.collectionIdent, id.native.tokenId] + ); + id.native.contract = params.erc721_addr; + } + + console.log(txFees.toString()); + console.log(txFees.toFixed(0), "x"); + + const tx = await minter + .connect(sender) + .populateTransaction[method]( + id.native.contract, + id.native.tokenId, + chain_nonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)).div(100), + gasLimit: gasLimit || 300_000, + gasPrice, + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const txr: TransactionResponse | unknown = await sender + .sendTransaction(tx) + .catch((e: any) => { + if (params.nonce === 33) { + return e; + } else throw e; + }); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = txr["transactionId"]; + } else if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = txr["returnedHash"] || txr.hash; + } else { + //@ts-ignore checked normal evm + txHash = txr.hash; + } + + await notifyValidator( + //@ts-ignore + txHash + ); + if (params.nonce === 33) { + return await provider.getTransaction(txHash); + } + return txr as any; + }, + async unfreezeWrappedNft( + sender: any, + to: string, + id: NftInfo, + txFees: BigNumber, + nonce, + gasLimit = undefined, + gasPrice + ): Promise { + await approveForMinter(id, sender, txFees); + + // Chain is Hedera + if (params.nonce === 0x1d) { + id.native.tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [EthBN.from(id.collectionIdent), id.native.tokenId] + ); + id.native.contract = params.erc721_addr; + } + + const txn = await minter + .connect(sender) + .populateTransaction.withdrawNft( + to, + nonce, + id.native.tokenId, + id.native.contract, + { + value: EthBN.from(txFees.toFixed(0)).div(100), + gasLimit: gasLimit || 300_00, + gasPrice, + } + ); + + await txnUnderpricedPolyWorkaround(txn); + const res = await sender.sendTransaction(txn); + console.log(res, "res"); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = res["transactionId"]; + } else if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = res["returnedHash"] || res.hash; + } else { + //@ts-ignore checked normal evm + txHash = res.hash; + } + + await notifyValidator(txHash); + if (params.nonce === 33) { + return await provider.getTransaction(txHash); + } + return res as any; + }, + async estimateValidateTransferNft( + _to: string, + _nftUri: NftInfo, + _mintWith + ): Promise { + const gas = await provider.getGasPrice(); + + return new BigNumber(gas.mul(150_000).toString()); + }, + async estimateContractDep(toChain: any): Promise { + try { + console.log("NEED TO DEPLOY CONTRACT"); + const gas = await provider.getGasPrice(); + const pro = toChain.getProvider(); + const wl = ["0x47Bf0dae6e92e49a3c95e5b0c71422891D5cd4FE"]; + const gk = 123; + const gkx = 42; + const factory = new ethers.ContractFactory( + Minter__factory.abi, + Minter__factory.bytecode + ); + const estimateGas = await pro.estimateGas( + factory.getDeployTransaction(gk, gkx, wl) + ); + const contractFee = gas.mul(estimateGas); + const sum = new BigNumber(contractFee.toString()); + return sum; + } catch (error: any) { + console.log(error.message); + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + } + }, + validateAddress(adr) { + return Promise.resolve(ethers.utils.isAddress(adr)); + }, + isNftWhitelisted(nft) { + return minter.nftWhitelist(nft.native.contract); + }, + }; +} diff --git a/src/helpers/near.ts b/src/helpers/near.ts new file mode 100644 index 000000000..4810a74aa --- /dev/null +++ b/src/helpers/near.ts @@ -0,0 +1,389 @@ +import BigNumber from "bignumber.js"; +import { BN } from "bn.js"; + +import { + Account, + connect, + Near, + keyStores, + WalletConnection, + KeyPair, + InMemorySigner, +} from "near-api-js"; + +import { + FinalExecutionOutcome, + getTransactionLastResult, +} from "near-api-js/lib/providers"; +import { Chain } from "../consts"; +import { SignatureService } from "../estimator"; +import { EvNotifier } from "../notifier"; +import { + ChainNonceGet, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + GetProvider, + MintNft, + NftInfo, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, + BalanceCheck, + PreTransfer, + WhitelistCheck, +} from "./chain"; + +type NearTxResult = [FinalExecutionOutcome, any]; + +type NearPreTransferArgs = { + to: string; + receiver: string; +}; + +export type NearParams = { + readonly networkId: string; + readonly nonce: number; + readonly rpcUrl: string; + readonly bridge: string; + readonly xpnft: string; + readonly feeMargin: FeeMargins; + readonly notifier: EvNotifier; + readonly walletUrl: string; + readonly helperUrl: string; + readonly signatureSvc: SignatureService; +}; +export type NearNFT = { + tokenId: string; + contract: string; +}; + +export type Metadata = { + title?: string; + description?: string; + media?: string; + mediaHash: Uint8Array | null; + issued_at: string | null; + expires_at: string | null; + starts_at: string | null; + updated_at: string | null; + extra?: string; + reference: string | null; + referenceHash: Uint8Array | null; +}; + +export interface NearMintArgs { + contract: string; + token_id: string; + token_owner_id: string; + metadata: Metadata; +} + +interface BrowserMethods { + connectWallet(): Promise; + getUserMinter(keypair: string, address: string): Promise; +} + +interface NotifyMethod { + notify(hash: string): Promise; +} + +export type NearHelper = ChainNonceGet & + BalanceCheck & + TransferNftForeign & + UnfreezeForeignNft & + MintNft & + EstimateTxFees & + Pick< + PreTransfer, + "preTransfer" + > & + ValidateAddress & { + XpNft: string; + nftList(owner: Account, contract: string): Promise[]>; + } & GetFeeMargins & + GetProvider & + BrowserMethods & + NotifyMethod & + WhitelistCheck; + +export async function nearHelperFactory({ + networkId, + bridge, + rpcUrl, + xpnft, + feeMargin, + notifier, + walletUrl, + signatureSvc, + helperUrl, +}: NearParams): Promise { + const near = await connect({ + nodeUrl: rpcUrl, + networkId, + headers: {}, + }); + + const isApproved = async ( + account: Account, + nft: NftInfo + ): Promise => { + const { tokenId: token_id, contract } = nft.native; + const result: boolean = await account.viewFunction({ + args: { + token_id, + approved_account_id: bridge, + approval_id: null, + }, + contractId: contract, + methodName: "nft_is_approved", + }); + return result; + }; + + const getWalletCallbackUrl = (params: string) => { + let walletCallbackUrl: string | undefined = undefined; + if (globalThis.window !== undefined) { + const network = + location.pathname.match(/^\/(staging|testnet)\/.+/)?.at(1) || ""; + const query = new URLSearchParams( + window.location.search.replace("?", "") + ); + const wid = query.get("wid"); + const selectedNearWallet = query.get("selectedNearWallet"); + walletCallbackUrl = `${location.protocol}//${ + location.host + }/${network}/connect?${wid ? `wid=${wid}&` : ""}${ + selectedNearWallet ? `selectedNearWallet=${selectedNearWallet}&` : "" + }${params}`; + } + return walletCallbackUrl; + }; + + const notifyValidators = async (hash: string) => { + //await new Promise((r) => setTimeout(r, 15_000)); + return notifier.notifyNear(hash); + }; + + return { + notify: notifyValidators, + async estimateValidateTransferNft(_to, _metadata, _mintWith) { + return new BigNumber(0); // TODO + }, + async estimateValidateUnfreezeNft(_to, _metadata, _mintWith) { + return new BigNumber(0); // TODO + }, + getNonce() { + return Chain.NEAR; + }, + async balance(address: string) { + const res = ( + await new Account(near.connection, address).getAccountBalance() + ).available; + return new BigNumber(res); + }, + async mintNft(owner, options) { + const result = await owner.functionCall({ + contractId: options.contract, + methodName: "nft_mint", + args: { + token_id: options.token_id, + token_owner_id: options.token_owner_id, + token_metadata: options.metadata, + }, + attachedDeposit: new BN("10000000000000000000000"), // 0.01 Near + }); + return [result, getTransactionLastResult(result)]; + }, + async nftList(owner, contract) { + const result = await owner.functionCall({ + contractId: contract, + methodName: "nft_tokens_for_owner", + args: { account_id: owner.accountId }, + }); + const res = getTransactionLastResult(result) as any[]; + + return res.map((r) => { + return { + native: { + tokenId: r.token_id, + contract, + }, + collectionIdent: contract, + uri: r.metadata.extra || r.metadata.media, + }; + }); + }, + async preTransfer(sender, nft, _fee, args) { + if (await isApproved(sender, nft)) { + return undefined; + } + if (!args) { + throw new Error("Missing args"); + } + const { receiver, to } = args; + const walletCallbackUrl = getWalletCallbackUrl( + `NEARTRX=true&type=approve&to=${to}&receiver=${encodeURIComponent( + receiver + )}&tokenId=${encodeURIComponent(nft.native.tokenId)}` + ); + + const result = await sender.functionCall({ + contractId: nft.native.contract, + methodName: "nft_approve", + args: { + token_id: nft.native.tokenId, + account_id: bridge, + }, + attachedDeposit: new BN("1000000000000000000000"), // 0.001 Near + ...(walletCallbackUrl ? { walletCallbackUrl } : {}), + }); + return result.transaction_outcome.id; + }, + XpNft: xpnft, + async transferNftToForeign(sender, chain_nonce, to, id, txFees, mint_with) { + const walletCallbackUrl = getWalletCallbackUrl( + `NEARTRX=true&type=transfer&to=${chain_nonce}&receiver=${encodeURIComponent( + to + )}&tokenId=${encodeURIComponent( + id.native.tokenId + )}&contract=${encodeURIComponent(id.native.contract)}` + ); + const res = await signatureSvc + .getSignatureNear( + Chain.NEAR, + chain_nonce as any, + id.native.tokenId, + id.collectionIdent, + id.native.tokenId, + to + ) + .catch(() => undefined); + + if (res) { + const result = await sender.functionCall({ + contractId: bridge, + args: { + token_id: id.native.tokenId, + chain_nonce, + to, + amt: new BigNumber(txFees) /*.div(2)*/, + mint_with, + token_contract: id.native.contract, + ...(res?.signature + ? { sig_data: [...Buffer.from(res.signature, "hex")] } + : {}), + }, + methodName: "freeze_nft", + attachedDeposit: new BN(res?.fee) /*.div(new BN(2))*/, + gas: new BN("300000000000000"), + ...(walletCallbackUrl ? { walletCallbackUrl } : {}), + }); + + await notifyValidators(result.transaction.hash); + return [result, getTransactionLastResult(result)]; + } else { + return undefined; + } + }, + getFeeMargin() { + return feeMargin; + }, + getProvider() { + return near; + }, + async unfreezeWrappedNft(sender, to, id, txFees, nonce) { + const walletCallbackUrl = getWalletCallbackUrl( + `NEARTRX=true&type=unfreeze&to=${nonce}&receiver=${encodeURIComponent( + to + )}&tokenId=${encodeURIComponent( + id.native.tokenId + )}&contract=${encodeURIComponent(id.native.contract)}` + ); + + const res = await signatureSvc.getSignatureNear( + Chain.NEAR, + nonce as any, + id.native.tokenId, + id.collectionIdent, + id.native.tokenId, + to + ); + + const result = await sender.functionCall({ + contractId: bridge, + args: { + token_id: id.native.tokenId, + chain_nonce: parseInt(nonce), + to, + amt: parseInt(txFees.toString()), + token_contract: id.native.contract, + sig_data: [...Buffer.from(res?.signature, "hex")], + }, + methodName: "withdraw_nft", + attachedDeposit: new BN(res?.fee), + gas: new BN("300000000000000"), + ...(walletCallbackUrl ? { walletCallbackUrl } : {}), + }); + + await notifyValidators(result.transaction.hash); + return [result, getTransactionLastResult(result)]; + }, + async validateAddress(adr) { + try { + await new Account(near.connection, adr).getAccountBalance(); + return true; + } catch (e) { + return false; + } + }, + + async connectWallet(url?: string) { + if (typeof window === "undefined") { + throw new Error("Browser method only"); + } + const nearConnection = await connect({ + networkId, + nodeUrl: rpcUrl, + keyStore: new keyStores.BrowserLocalStorageKeyStore(), + headers: {}, + walletUrl: url || walletUrl, + helperUrl, + }); + const wc = new WalletConnection(nearConnection, ""); + + return wc; + }, + + async isNftWhitelisted(nft: NftInfo, signer: Account) { + const result: boolean = await signer + .viewFunction({ + args: { + contract_id: nft.native.contract, + }, + contractId: bridge, + methodName: "is_whitelist", + }) + .catch(() => false); + + return result; + }, + + async getUserMinter(keypair: string, address: string) { + const keyStore = new keyStores.InMemoryKeyStore(); + const keyPair = KeyPair.fromString(keypair); + keyStore.setKey(networkId, address, keyPair); + + const signer = new InMemorySigner(keyStore); + + const provider = await connect({ + headers: {}, + nodeUrl: rpcUrl, + networkId, + signer, + }); + + return provider; + }, + }; +} diff --git a/src/helpers/polkadot.ts b/src/helpers/polkadot.ts deleted file mode 100644 index 81b815893..000000000 --- a/src/helpers/polkadot.ts +++ /dev/null @@ -1,328 +0,0 @@ -/** - * Polkadot Implementation for cross chain traits - * @module - */ -import { ApiPromise, Keyring, WsProvider } from "@polkadot/api"; -import { Callback, ISubmittableResult, RegistryTypes } from "@polkadot/types/types"; -import { Address, H256, Hash, LookupSource } from "@polkadot/types/interfaces"; -import BigNumber from "bignumber.js"; -import { - TransferForeign, - TransferNftForeign, - UnfreezeForeign, - UnfreezeForeignNft, - BalanceCheck, - MintNft, - ListNft, - GetLockedNft, - WrappedBalanceCheck, - BatchWrappedBalanceCheck, - ConcurrentSendError, - DecodeWrappedNft, - WrappedNft, - DecodeRawNft -} from "./chain"; -import { AddressOrPair } from "@polkadot/api/types"; -import { SignerOptions, SubmittableExtrinsic } from "@polkadot/api/submittable/types"; -import {BTreeMap, Bytes, Option, Tuple, U8aFixed} from "@polkadot/types"; -import { NftPacked } from "validator/dist/encoding" - -/** - * Type of sender expected by this module - * - * @param sender Address of the sender, or a Keypair - * @param options Options for sigining this transaction. Mandatory if sender is an address - */ -export type Signer = { - sender: AddressOrPair, - options?: Partial -} - -type EasyBalance = string | number | BigNumber; -type EasyAddr = string | LookupSource | Address; - -type BasePolkadot = BalanceCheck; - -/** - * identifier for tracking an action - */ -type EventIdent = BigNumber; - -export type PolkadotHelper = BasePolkadot & - TransferForeign & - UnfreezeForeign; - -/** - * Traits implemented by this module - */ -export type PolkadotPalletHelper = PolkadotHelper & - WrappedBalanceCheck & - BatchWrappedBalanceCheck & - TransferNftForeign & - UnfreezeForeignNft & - MintNft & - ListNft & - GetLockedNft & - DecodeWrappedNft & - DecodeRawNft; - - -const LUT_HEX_4b = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; -const LUT_HEX_8b = new Array(0x100); -for (let n = 0; n < 0x100; n++) { - LUT_HEX_8b[n] = `${LUT_HEX_4b[(n >>> 4) & 0xF]}${LUT_HEX_4b[n & 0xF]}`; -} -/** - * @internal - */ -// End Pre-Init -export function toHex(buffer: Uint8Array) { - let out = ''; - for (let idx = 0, edx = buffer.length; idx < edx; idx++) { - out += LUT_HEX_8b[buffer[idx]]; - } - return `0x${out}`; -} - -async function basePolkadotHelper( - node_uri: string - ): Promise<[BasePolkadot, ApiPromise]> { - const provider = new WsProvider(node_uri); - const api = await ApiPromise.create({ provider, types: runtimeTypes }); - - const base = { - async balance( - address: EasyAddr - ): Promise { - - const res: any = await api.query.system.account(address); - - return new BigNumber(res['data']['free'].toString()); - } - } - - return [base, api] -} - -function hasAddrField(ob: any): ob is { address: string } { - return ob.hasOwnField('address') && typeof ob.address == "string"; -} - -async function resolve_event_id(ext: SubmittableExtrinsic<'promise', R>, filter: string, signer: AddressOrPair, options?: Partial): Promise<[Hash, EventIdent]> { - let call: (cb: Callback) => Promise<() => void>; - if (options) { - options.nonce = -1; - call = async (cb: Callback) => await ext.signAndSend(signer, options, cb); - } else { - call = async (cb: Callback) => await ext.signAndSend(signer, { nonce: -1 }, cb); - } - - const evP: Promise<[Hash, EventIdent]> = new Promise((res, rej) => { - call(({ events, status }) => { - if (!status.isInBlock) { - return; - } - - const ev = events.find(e => e.event.method == filter); - if (ev === undefined) { - rej(); - return; - } - - const action_id = new BigNumber(ev.event.data[0].toString()); - const hash = status.asInBlock; - - res([hash, action_id]); - }) - }); - - try { - return await evP; - } catch (e) { - if (e.message.contains("Priority is too low")) { - throw ConcurrentSendError(); - } - throw e; - } -} - -/** - * Create an object implementing Cross Chain utilities for Polkadot - * - * @param node_uri URI of the polkadot node - */ -export const polkadotPalletHelperFactory: ( - node_uri: string -) => Promise = async (node_uri: string) => { - const [base, api] = await basePolkadotHelper(node_uri); - const keyring = new Keyring(); - const sudoSigner = keyring.createFromUri("//Alice", undefined, "sr25519"); - const decoder = new TextDecoder(); - - function nftListMapper([nft_id, data]: [H256, Bytes]): [string, Uint8Array] { - return [nft_id.toString(), data]; - } - - async function getLockedNft( - hash: H256 - ): Promise { - const com = await api.query.nft.lockedCommodities(hash) as Option; - if (com.isNone) { - return undefined; - } - - const [_owner, dat] = com.unwrap(); - return dat as Bytes; - } - - return { - ...base, - async balanceWrapped( - address: EasyAddr, - chain_nonce: number - ): Promise { - const res = await api.query.erc1155.balances(address, chain_nonce); - return new BigNumber(res.toString()) - }, - async balanceWrappedBatch( - address: EasyAddr, - chain_nonces: number[] - ): Promise> { - // Multi query with address, chain_nonce - const res: Option[] = await api.query.erc1155.balances.multi(chain_nonces.map(c => [address, c])); - - // Convert list of balances to [chain_nonce, balance] - return new Map(res.map((b: Option, i) => [chain_nonces[i], b.isSome ? new BigNumber(b.unwrap().toString()) : new BigNumber(0)])) - }, - async transferNativeToForeign( - sender: Signer, - chain_nonce: number, - to: string, - value: EasyBalance - ): Promise<[Hash, EventIdent]> { - return await resolve_event_id( - api.tx.freezer.send(chain_nonce, to, value.toString()), - "TransferFrozen", - sender.sender, sender.options - ); - }, - async unfreezeWrapped( - sender: Signer, - chain_nonce: number, - to: string, - value: EasyBalance - ): Promise<[Hash, EventIdent]> { - return await resolve_event_id( - api.tx.freezer.withdrawWrapped(chain_nonce, to, value.toString()), - "UnfreezeWrapped", - sender.sender, sender.options - ); - }, - async transferNftToForeign( - sender: Signer, - chain_nonce: number, - to: string, - nft_id: H256 - ): Promise<[Hash, EventIdent]> { - return await resolve_event_id( - api.tx.freezer.sendNft(chain_nonce, to, nft_id), - "TransferUniqueFrozen", - sender.sender, sender.options - ); - }, - async unfreezeWrappedNft( - sender: Signer, - to: string, - nft_id: H256 - ): Promise<[Hash, EventIdent]> { - return await resolve_event_id( - api.tx.freezer.withdrawWrappedNft(to, nft_id), - "UnfreezeUniqueWrapped", - sender.sender, sender.options - ); - }, - async mintNft( - owner: Signer, - info: Uint8Array - ): Promise { - let addr; - // "static typing :|" - if (typeof owner.sender == "string") { - addr = owner.sender; - } else if (hasAddrField(owner.sender)) { - addr = owner.sender.address; - } else { - addr = owner.sender.toString(); - } - - await api.tx.sudo.sudo( - api.tx.nft.mint(addr, toHex(info)) - ).signAndSend(sudoSigner, { nonce: -1 }); - }, - async listNft( - owner: EasyAddr - ): Promise> { - const com = await api.query.nft.commoditiesForAccount(owner.toString()) as Option>; - if (com.isNone) { - return new Map(); - } - const c = Array.from(com.unwrap()).map(nftListMapper); - return new Map(c); - }, - getLockedNft, - decodeWrappedNft( - raw_data: Uint8Array - ): WrappedNft { - const packed = NftPacked.deserializeBinary(Uint8Array.from(raw_data)); - - return { - chain_nonce: packed.getChainNonce(), - data: packed.getData_asU8() - } - }, - async decodeUrlFromRaw( - data: Uint8Array - ): Promise { - const locked = await getLockedNft(new U8aFixed(api.registry, data, 256)); - if (locked === undefined) { - throw Error("not a locked nft"); - } - - return decoder.decode(locked.slice(-24)); - } - }; -}; - -const runtimeTypes: RegistryTypes = { - ActionId: "u128", - TokenId: "u64", - CommodityId: "H256", - CommodityInfo: "Bytes", - NftId: "H256", - NftInfo: "Bytes", - Erc1155Balance: "Balance", - Commodity: "(H256, Bytes)", - LocalAction: { - _enum: { - //@ts-expect-error enum struct - Unfreeze: { - to: "AccountId", - value: "Balance", - }, - //@ts-expect-error enum struct - RpcCall: { - contract: "AccountId", - call_data: "Bytes", - }, - //@ts-expect-error enum struct - TransferWrapped: { - to: "AccountId", - value: "Balance", - }, - }, - }, - ActionInfo: { - action: "LocalAction", - validators: "BTreeSet", - }, -}; diff --git a/src/helpers/secret.ts b/src/helpers/secret.ts new file mode 100644 index 000000000..f66f03079 --- /dev/null +++ b/src/helpers/secret.ts @@ -0,0 +1,375 @@ +import BigNumber from "bignumber.js"; +import { + Bech32, + SecretNetworkClient, + addressToBytes, + toBase64, +} from "secretjs"; +import { + Extension, + Snip721MintOptions, +} from "secretjs/dist/extensions/snip721/types"; +import { Snip721GetTokensResponse } from "secretjs/dist/extensions/snip721/msg/GetTokens"; +import { EvNotifier } from "../notifier"; +import { + BalanceCheck, + ChainNonceGet, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + GetProvider, + MintNft, + NftInfo, + PreTransfer, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, + WhitelistCheck, +} from "./chain"; + +export type SecretNftInfo = { + contract: string; + contractHash: string; + chainId: string; + tokenId: string; + vk: string; + metadata: Extension | undefined; +}; +export type SecretMintArgs = { + url: string; + contract?: SecretContract; +}; + +type SecretSigner = SecretNetworkClient; + +type GetOwnedTokensResponse = Snip721GetTokensResponse & { + generic_err?: { msg: string }; +}; + +export type SecretHelper = TransferNftForeign< + SecretSigner, + SecretNftInfo, + any +> & + UnfreezeForeignNft & + ValidateAddress & + EstimateTxFees & + ChainNonceGet & + WhitelistCheck & + PreTransfer & + BalanceCheck & + GetFeeMargins & { XpNft: string } & GetProvider & + MintNft & { + nftList( + owner: string, + + viewingKey: string, + contract: string, + codeHash?: string + ): Promise[]>; + setViewingKey( + client: SecretNetworkClient, + contract: string, + vk: string + ): Promise; + isApprovedForMinter( + sender: SecretSigner, + nft: NftInfo + ): Promise; + }; + +export type SecretContract = { + contractAddress: string; + codeHash: string; +}; + +export type SecretParams = { + rpcUrl: string; + chainId: string; + notifier: EvNotifier; + bridge: SecretContract; + xpnft: SecretContract; + umt: SecretContract; + feeMargin: FeeMargins; +}; + +// TODO +const TRANSFER_GASL = new BigNumber(0); + +// TODO +const UNFREEZE_GASL = new BigNumber(0); + +export async function secretHelperFactory( + p: SecretParams +): Promise { + const queryClient = await SecretNetworkClient.create({ + grpcWebUrl: p.rpcUrl, + chainId: p.chainId, + }); + + // TODO + const gasPrice = 1; + + async function isApprovedForMinter( + sender: SecretSigner, + nft: NftInfo + ) { + const approval = await sender.query.snip721.GetTokenInfo({ + auth: { + viewer: { + address: sender.address, + viewing_key: nft.native.vk, + }, + }, + contract: { + address: nft.collectionIdent, + codeHash: nft.native.contractHash, + }, + token_id: nft.native.tokenId, + }); + for (let appr of approval.all_nft_info.access.approvals) { + if ( + (appr as any)["spender"].toLowerCase() === + p.bridge.contractAddress.toLowerCase() + ) { + return true; + } + } + return false; + } + + async function preTransfer( + sender: SecretSigner, + nft: NftInfo + ) { + // TODO: check if approved + if (await isApprovedForMinter(sender, nft)) { + return undefined; + } + const res = await sender.tx.compute.executeContract( + { + sender: sender.address, + contractAddress: nft.native.contract, + codeHash: nft.native.contractHash, + msg: { + approve: { + spender: p.bridge.contractAddress, + token_id: nft.native.tokenId, + }, + }, + }, + { + waitForCommit: true, + gasLimit: 250_000, + } + ); + return res.transactionHash; + } + + return { + getFeeMargin() { + return p.feeMargin; + }, + getProvider() { + return queryClient; + }, + getNonce: () => 0x18, + balance: async (address) => { + const b = await queryClient.query.bank.balance({ + address, + denom: "uscrt", + }); + + return new BigNumber(b.balance?.amount || 0); + }, + isApprovedForMinter, + async mintNft(signer, args) { + const minter = args.contract ? args.contract : p.umt; + const tx = await signer.tx.compute.executeContract( + { + contractAddress: minter.contractAddress, + codeHash: minter.codeHash, + msg: { + mint_nft: { + public_metadata: { + token_uri: args.url, + }, + owner: signer.address, + transferable: true, + }, + } as Snip721MintOptions, + sender: signer.address, + }, + { + waitForCommit: true, + gasLimit: 500_000, + } + ); + return tx; + }, + XpNft: `${p.xpnft.contractAddress},${p.xpnft.codeHash}`, + validateAddress: async (a) => { + try { + Bech32.decode(a); + return true; + } catch { + return false; + } + }, + async nftList(owner, vk, contractAddress, codeHash) { + const auth = { + viewer: { + viewing_key: vk, + address: owner, + }, + }; + if (!codeHash) { + codeHash = await queryClient.query.compute.contractCodeHash( + contractAddress + ); + } + const contract = { + address: contractAddress, + codeHash: codeHash || "", + }; + + const { token_list, generic_err } = + (await queryClient.query.snip721.GetOwnedTokens({ + contract, + auth, + owner, + })) as GetOwnedTokensResponse; + + if (generic_err) throw new Error(generic_err.msg); + + const response: NftInfo[] = []; + + await Promise.all( + token_list.tokens.map(async (token) => { + const tokenInfo = await queryClient.query.snip721.GetTokenInfo({ + contract, + auth, + token_id: token, + }); + + response.push({ + collectionIdent: contractAddress, + uri: tokenInfo.all_nft_info.info?.token_uri || "", + native: { + chainId: p.chainId, + contract: contractAddress, + contractHash: codeHash || "", + tokenId: token, + vk, + metadata: tokenInfo.all_nft_info.info?.extension, + }, + }); + }) + ); + return response; + }, + estimateValidateTransferNft: async () => { + return TRANSFER_GASL.times(gasPrice); + }, + estimateValidateUnfreezeNft: async () => { + return UNFREEZE_GASL.times(gasPrice); + }, + async setViewingKey(client, contract, vk) { + const tx = await client.tx.snip721.setViewingKey( + { + contractAddress: contract, + msg: { + set_viewing_key: { + key: vk, + }, + }, + sender: client.address, + }, + { + waitForCommit: true, + gasLimit: 500_000, + } + ); + return tx; + }, + preTransfer, + preUnfreeze: preTransfer, + transferNftToForeign: async (wallet, chainNonce, to, nft, fee, mw) => { + const tx = await wallet.tx.compute.executeContract( + { + sender: wallet.address, + contractAddress: p.bridge.contractAddress, + codeHash: p.bridge.codeHash, + msg: { + freeze_nft: { + contract: nft.native.contract, + contract_hash: nft.native.contractHash, + viewer: { + viewing_key: nft.native.vk, + address: wallet.address, + }, + token_id: nft.native.tokenId, + to, + chain_nonce: chainNonce, + minter: mw, + }, + }, + sentFunds: [ + { + denom: "uscrt", + amount: fee.toString(10), + }, + ], + }, + { waitForCommit: true, gasLimit: 500_000 } + ); + + await p.notifier.notifySecret(tx.transactionHash, nft.native.vk); + + return tx; + }, + unfreezeWrappedNft: async (wallet, to, nft, fee, chainNonce) => { + const tx = await wallet.tx.compute.executeContract( + { + sender: wallet.address, + contractAddress: p.bridge.contractAddress, + codeHash: p.bridge.codeHash, + msg: { + withdraw_nft: { + burner: nft.native.contract, + burner_hash: nft.native.contractHash, + token_id: nft.native.tokenId, + to, + chain_nonce: Number(chainNonce), + }, + }, + sentFunds: [ + { + denom: "uscrt", + amount: fee.toString(10), + }, + ], + }, + { waitForCommit: true, gasLimit: 500_000 } + ); + + await p.notifier.notifySecret(tx.transactionHash, nft.native.vk); + + return tx; + }, + isNftWhitelisted: async (nft) => { + if (!nft.native?.contract) return false; + const result = await queryClient.query.compute.queryContract({ + contractAddress: p.bridge.contractAddress, + codeHash: p.bridge.codeHash, + query: { + get_whitelisted: { + addr: toBase64(addressToBytes(nft.native.contract)), + }, + }, + }); + + return typeof result === "boolean" ? result : false; + }, + }; +} diff --git a/src/helpers/solana/idl.ts b/src/helpers/solana/idl.ts new file mode 100644 index 000000000..a5f6bc796 --- /dev/null +++ b/src/helpers/solana/idl.ts @@ -0,0 +1,1793 @@ +export type XpBridge = { + version: "0.1.0"; + name: "xp_bridge"; + instructions: [ + { + name: "initialize"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "groupKey"; + type: { + array: ["u8", 32]; + }; + } + ]; + }, + { + name: "validatePause"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "PauseData"; + }; + } + ]; + }, + { + name: "validateUnpause"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "UnpauseData"; + }; + } + ]; + }, + { + name: "validateWithdrawFees"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "WithdrawFeesData"; + }; + } + ]; + }, + { + name: "validateUpdateGroupkey"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "UpdateGroupkeyData"; + }; + } + ]; + }, + { + name: "validateTransferNft"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "authority"; + isMut: false; + isSigner: false; + }, + { + name: "mint"; + isMut: true; + isSigner: false; + }, + { + name: "tokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "metadataAccount"; + isMut: true; + isSigner: false; + }, + { + name: "editionAccount"; + isMut: true; + isSigner: false; + }, + { + name: "metadataProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "rent"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "TransferNftData"; + }; + } + ]; + }, + { + name: "withdrawNft"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "authority"; + isMut: true; + isSigner: true; + }, + { + name: "mint"; + isMut: true; + isSigner: false; + }, + { + name: "tokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "chainNonce"; + type: "u8"; + }, + { + name: "to"; + type: "string"; + }, + { + name: "lamports"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + } + ]; + }, + { + name: "freezeNft"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "authority"; + isMut: true; + isSigner: true; + }, + { + name: "from"; + isMut: true; + isSigner: false; + }, + { + name: "to"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "chainNonce"; + type: "u8"; + }, + { + name: "to"; + type: "string"; + }, + { + name: "lamports"; + type: "u64"; + }, + { + name: "mintWith"; + type: "string"; + }, + { + name: "bridgeBump"; + type: "u8"; + } + ]; + }, + { + name: "validateUnfreezeNft"; + accounts: [ + { + name: "bridge"; + isMut: true; + isSigner: false; + }, + { + name: "from"; + isMut: true; + isSigner: false; + }, + { + name: "to"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "consumedAction"; + isMut: true; + isSigner: false; + }, + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "instructionAcc"; + isMut: false; + isSigner: false; + } + ]; + args: [ + { + name: "data"; + type: { + defined: "UnfreezeNftData"; + }; + } + ]; + } + ]; + accounts: [ + { + name: "bridge"; + type: { + kind: "struct"; + fields: [ + { + name: "paused"; + type: "bool"; + }, + { + name: "groupKey"; + type: { + array: ["u8", 32]; + }; + }, + { + name: "actionId"; + type: "u128"; + } + ]; + }; + }, + { + name: "consumedAction"; + type: { + kind: "struct"; + fields: [ + { + name: "consumed"; + type: "bool"; + } + ]; + }; + } + ]; + types: [ + { + name: "PauseData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + } + ]; + }; + }, + { + name: "UnpauseData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + } + ]; + }; + }, + { + name: "UpdateGroupkeyData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + }, + { + name: "newKey"; + type: { + array: ["u8", 32]; + }; + } + ]; + }; + }, + { + name: "TransferNftData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + }, + { + name: "authBump"; + type: "u8"; + }, + { + name: "chainNonce"; + type: "u64"; + }, + { + name: "name"; + type: "string"; + }, + { + name: "symbol"; + type: "string"; + }, + { + name: "uri"; + type: "string"; + }, + { + name: "owner"; + type: "publicKey"; + }, + { + name: "collection"; + type: { + option: { + defined: "AnchorCollection"; + }; + }; + }, + { + name: "sellerFeeBasisPoints"; + type: { + option: "u16"; + }; + }, + { + name: "creators"; + type: { + option: { + vec: { + defined: "AnchorCreator"; + }; + }; + }; + } + ]; + }; + }, + { + name: "AnchorDataV2"; + type: { + kind: "struct"; + fields: [ + { + name: "name"; + docs: ["The name of the asset"]; + type: "string"; + }, + { + name: "symbol"; + docs: ["The symbol for the asset"]; + type: "string"; + }, + { + name: "uri"; + docs: ["URI pointing to JSON representing the asset"]; + type: "string"; + }, + { + name: "sellerFeeBasisPoints"; + docs: [ + "Royalty basis points that goes to creators in secondary sales (0-10000)" + ]; + type: "u16"; + }, + { + name: "creators"; + docs: ["Array of creators, optional"]; + type: { + option: { + vec: { + defined: "AnchorCreator"; + }; + }; + }; + }, + { + name: "collection"; + docs: ["Collection"]; + type: { + option: { + defined: "AnchorCollection"; + }; + }; + }, + { + name: "uses"; + docs: ["Uses"]; + type: { + option: { + defined: "AnchorUses"; + }; + }; + } + ]; + }; + }, + { + name: "AnchorCreator"; + type: { + kind: "struct"; + fields: [ + { + name: "address"; + type: "publicKey"; + }, + { + name: "verified"; + type: "bool"; + }, + { + name: "share"; + type: "u8"; + } + ]; + }; + }, + { + name: "AnchorCollection"; + type: { + kind: "struct"; + fields: [ + { + name: "verified"; + type: "bool"; + }, + { + name: "key"; + type: "publicKey"; + } + ]; + }; + }, + { + name: "AnchorUses"; + type: { + kind: "struct"; + fields: [ + { + name: "useMethod"; + type: { + defined: "AnchorUseMethod"; + }; + }, + { + name: "remaining"; + type: "u64"; + }, + { + name: "total"; + type: "u64"; + } + ]; + }; + }, + { + name: "WithdrawFeesData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + } + ]; + }; + }, + { + name: "UnfreezeNftData"; + type: { + kind: "struct"; + fields: [ + { + name: "actionId"; + type: "u64"; + }, + { + name: "bridgeBump"; + type: "u8"; + }, + { + name: "receiver"; + type: "publicKey"; + }, + { + name: "mint"; + type: "publicKey"; + } + ]; + }; + }, + { + name: "AnchorUseMethod"; + type: { + kind: "enum"; + variants: [ + { + name: "Burn"; + }, + { + name: "Multiple"; + }, + { + name: "Single"; + } + ]; + }; + } + ]; + events: [ + { + name: "TransferNft"; + fields: [ + { + name: "chainNonce"; + type: "u8"; + index: false; + }, + { + name: "to"; + type: "string"; + index: true; + }, + { + name: "mint"; + type: "publicKey"; + index: false; + }, + { + name: "actionId"; + type: "u128"; + index: false; + }, + { + name: "mintWith"; + type: "string"; + index: false; + }, + { + name: "lamports"; + type: "u64"; + index: false; + } + ]; + }, + { + name: "UnfreezeNft"; + fields: [ + { + name: "chainNonce"; + type: "u8"; + index: false; + }, + { + name: "to"; + type: "string"; + index: true; + }, + { + name: "actionId"; + type: "u128"; + index: false; + }, + { + name: "mint"; + type: "publicKey"; + index: false; + }, + { + name: "lamports"; + type: "u64"; + index: false; + } + ]; + } + ]; + errors: [ + { + code: 6000; + name: "Paused"; + msg: "Pausable: paused"; + }, + { + code: 6001; + name: "Unpaused"; + msg: "Pausable: unpaused"; + }, + { + code: 6002; + name: "AlreadyMinted"; + msg: "Already minted"; + }, + { + code: 6003; + name: "AlreadyBurned"; + msg: "Already burned"; + }, + { + code: 6004; + name: "InstructionAtWrongIndex"; + msg: "instruction at wrong index"; + }, + { + code: 6005; + name: "InvalidEd25519Instruction"; + msg: "invalid ed25519 instruction"; + }, + { + code: 6006; + name: "InvalidGroupKey"; + msg: "invalid group key"; + }, + { + code: 6007; + name: "InvalidProgramId"; + msg: "invalid program id"; + }, + { + code: 6008; + name: "InvalidArgs"; + msg: "invalid args"; + }, + { + code: 6009; + name: "InvalidActionId"; + msg: "invalid action id"; + }, + { + code: 6010; + name: "DuplicatedAction"; + msg: "duplicated action"; + }, + { + code: 6011; + name: "IncorrectOwner"; + msg: "incorrect owner"; + }, + { + code: 6012; + name: "InvalidMint"; + msg: "invalid mint"; + }, + { + code: 6013; + name: "InsufficientFundsForTransaction"; + msg: "insufficient funds for transaction"; + } + ]; +}; + +export const IDL: XpBridge = { + version: "0.1.0", + name: "xp_bridge", + instructions: [ + { + name: "initialize", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "user", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "groupKey", + type: { + array: ["u8", 32], + }, + }, + ], + }, + { + name: "validatePause", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "user", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "PauseData", + }, + }, + ], + }, + { + name: "validateUnpause", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "user", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "UnpauseData", + }, + }, + ], + }, + { + name: "validateWithdrawFees", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "user", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "WithdrawFeesData", + }, + }, + ], + }, + { + name: "validateUpdateGroupkey", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "user", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "UpdateGroupkeyData", + }, + }, + ], + }, + { + name: "validateTransferNft", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "authority", + isMut: false, + isSigner: false, + }, + { + name: "mint", + isMut: true, + isSigner: false, + }, + { + name: "tokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "metadataAccount", + isMut: true, + isSigner: false, + }, + { + name: "editionAccount", + isMut: true, + isSigner: false, + }, + { + name: "metadataProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "rent", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "TransferNftData", + }, + }, + ], + }, + { + name: "withdrawNft", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "authority", + isMut: true, + isSigner: true, + }, + { + name: "mint", + isMut: true, + isSigner: false, + }, + { + name: "tokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "chainNonce", + type: "u8", + }, + { + name: "to", + type: "string", + }, + { + name: "lamports", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + ], + }, + { + name: "freezeNft", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "authority", + isMut: true, + isSigner: true, + }, + { + name: "from", + isMut: true, + isSigner: false, + }, + { + name: "to", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "chainNonce", + type: "u8", + }, + { + name: "to", + type: "string", + }, + { + name: "lamports", + type: "u64", + }, + { + name: "mintWith", + type: "string", + }, + { + name: "bridgeBump", + type: "u8", + }, + ], + }, + { + name: "validateUnfreezeNft", + accounts: [ + { + name: "bridge", + isMut: true, + isSigner: false, + }, + { + name: "from", + isMut: true, + isSigner: false, + }, + { + name: "to", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "consumedAction", + isMut: true, + isSigner: false, + }, + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "instructionAcc", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "data", + type: { + defined: "UnfreezeNftData", + }, + }, + ], + }, + ], + accounts: [ + { + name: "bridge", + type: { + kind: "struct", + fields: [ + { + name: "paused", + type: "bool", + }, + { + name: "groupKey", + type: { + array: ["u8", 32], + }, + }, + { + name: "actionId", + type: "u128", + }, + ], + }, + }, + { + name: "consumedAction", + type: { + kind: "struct", + fields: [ + { + name: "consumed", + type: "bool", + }, + ], + }, + }, + ], + types: [ + { + name: "PauseData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + ], + }, + }, + { + name: "UnpauseData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + ], + }, + }, + { + name: "UpdateGroupkeyData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + { + name: "newKey", + type: { + array: ["u8", 32], + }, + }, + ], + }, + }, + { + name: "TransferNftData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + { + name: "authBump", + type: "u8", + }, + { + name: "chainNonce", + type: "u64", + }, + { + name: "name", + type: "string", + }, + { + name: "symbol", + type: "string", + }, + { + name: "uri", + type: "string", + }, + { + name: "owner", + type: "publicKey", + }, + { + name: "collection", + type: { + option: { + defined: "AnchorCollection", + }, + }, + }, + { + name: "sellerFeeBasisPoints", + type: { + option: "u16", + }, + }, + { + name: "creators", + type: { + option: { + vec: { + defined: "AnchorCreator", + }, + }, + }, + }, + ], + }, + }, + { + name: "AnchorDataV2", + type: { + kind: "struct", + fields: [ + { + name: "name", + docs: ["The name of the asset"], + type: "string", + }, + { + name: "symbol", + docs: ["The symbol for the asset"], + type: "string", + }, + { + name: "uri", + docs: ["URI pointing to JSON representing the asset"], + type: "string", + }, + { + name: "sellerFeeBasisPoints", + docs: [ + "Royalty basis points that goes to creators in secondary sales (0-10000)", + ], + type: "u16", + }, + { + name: "creators", + docs: ["Array of creators, optional"], + type: { + option: { + vec: { + defined: "AnchorCreator", + }, + }, + }, + }, + { + name: "collection", + docs: ["Collection"], + type: { + option: { + defined: "AnchorCollection", + }, + }, + }, + { + name: "uses", + docs: ["Uses"], + type: { + option: { + defined: "AnchorUses", + }, + }, + }, + ], + }, + }, + { + name: "AnchorCreator", + type: { + kind: "struct", + fields: [ + { + name: "address", + type: "publicKey", + }, + { + name: "verified", + type: "bool", + }, + { + name: "share", + type: "u8", + }, + ], + }, + }, + { + name: "AnchorCollection", + type: { + kind: "struct", + fields: [ + { + name: "verified", + type: "bool", + }, + { + name: "key", + type: "publicKey", + }, + ], + }, + }, + { + name: "AnchorUses", + type: { + kind: "struct", + fields: [ + { + name: "useMethod", + type: { + defined: "AnchorUseMethod", + }, + }, + { + name: "remaining", + type: "u64", + }, + { + name: "total", + type: "u64", + }, + ], + }, + }, + { + name: "WithdrawFeesData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + ], + }, + }, + { + name: "UnfreezeNftData", + type: { + kind: "struct", + fields: [ + { + name: "actionId", + type: "u64", + }, + { + name: "bridgeBump", + type: "u8", + }, + { + name: "receiver", + type: "publicKey", + }, + { + name: "mint", + type: "publicKey", + }, + ], + }, + }, + { + name: "AnchorUseMethod", + type: { + kind: "enum", + variants: [ + { + name: "Burn", + }, + { + name: "Multiple", + }, + { + name: "Single", + }, + ], + }, + }, + ], + events: [ + { + name: "TransferNft", + fields: [ + { + name: "chainNonce", + type: "u8", + index: false, + }, + { + name: "to", + type: "string", + index: true, + }, + { + name: "mint", + type: "publicKey", + index: false, + }, + { + name: "actionId", + type: "u128", + index: false, + }, + { + name: "mintWith", + type: "string", + index: false, + }, + { + name: "lamports", + type: "u64", + index: false, + }, + ], + }, + { + name: "UnfreezeNft", + fields: [ + { + name: "chainNonce", + type: "u8", + index: false, + }, + { + name: "to", + type: "string", + index: true, + }, + { + name: "actionId", + type: "u128", + index: false, + }, + { + name: "mint", + type: "publicKey", + index: false, + }, + { + name: "lamports", + type: "u64", + index: false, + }, + ], + }, + ], + errors: [ + { + code: 6000, + name: "Paused", + msg: "Pausable: paused", + }, + { + code: 6001, + name: "Unpaused", + msg: "Pausable: unpaused", + }, + { + code: 6002, + name: "AlreadyMinted", + msg: "Already minted", + }, + { + code: 6003, + name: "AlreadyBurned", + msg: "Already burned", + }, + { + code: 6004, + name: "InstructionAtWrongIndex", + msg: "instruction at wrong index", + }, + { + code: 6005, + name: "InvalidEd25519Instruction", + msg: "invalid ed25519 instruction", + }, + { + code: 6006, + name: "InvalidGroupKey", + msg: "invalid group key", + }, + { + code: 6007, + name: "InvalidProgramId", + msg: "invalid program id", + }, + { + code: 6008, + name: "InvalidArgs", + msg: "invalid args", + }, + { + code: 6009, + name: "InvalidActionId", + msg: "invalid action id", + }, + { + code: 6010, + name: "DuplicatedAction", + msg: "duplicated action", + }, + { + code: 6011, + name: "IncorrectOwner", + msg: "incorrect owner", + }, + { + code: 6012, + name: "InvalidMint", + msg: "invalid mint", + }, + { + code: 6013, + name: "InsufficientFundsForTransaction", + msg: "insufficient funds for transaction", + }, + ], +}; diff --git a/src/helpers/solana/index.ts b/src/helpers/solana/index.ts new file mode 100644 index 000000000..e7723945b --- /dev/null +++ b/src/helpers/solana/index.ts @@ -0,0 +1,350 @@ +/*import { + Metaplex, + bundlrStorage, + walletAdapterIdentity, +} from "@metaplex-foundation/js";*/ +import { + Wallet, + BN, + Program, + AnchorProvider, + Spl, +} from "@project-serum/anchor"; +import { + Account, + createAssociatedTokenAccountInstruction, + getAccount, + getAssociatedTokenAddress, + TokenAccountNotFoundError, + TokenInvalidAccountOwnerError, + TokenInvalidMintError, + TokenInvalidOwnerError, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { + Connection, + PublicKey, + Transaction, + //LAMPORTS_PER_SOL, +} from "@solana/web3.js"; + +import BigNumber from "bignumber.js"; +import { Chain } from "../.."; +import { EvNotifier } from "../../notifier"; +import { + ChainNonceGet, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + GetProvider, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, + BalanceCheck, + MintNft, +} from "../chain"; +import { IDL } from "./idl"; + +export type SolanaSigner = Wallet; + +export type SolanaNft = { + nftMint: string; +}; + +type SolanaMintArgs = { + uri: string; +}; + +export type SolanaHelper = ChainNonceGet & + BalanceCheck & + MintNft & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ValidateAddress & { + connection: Connection; + } & { XpNft: string } & GetFeeMargins & + GetProvider; + +export type SolanaParams = { + endpoint: string; + bridgeContractAddr: string; + xpnftAddr: string; + notifier: EvNotifier; + feeMargin: FeeMargins; +}; + +// Based on https://github.com/solana-labs/solana-program-library/blob/118bd047aa0f1ba1930b5bc4639d40aa2a375ccb/token/js/src/actions/getOrCreateAssociatedTokenAccount.ts +async function getOrCreateAssociatedTokenAccount( + connection: Connection, + payer: SolanaSigner, + mint: PublicKey, + owner: PublicKey, + allowOwnerOffCurve = false +) { + const provider = new AnchorProvider(connection, payer, {}); + const associatedToken = await getAssociatedTokenAddress( + mint, + owner, + allowOwnerOffCurve + ); + + // This is the optimal logic, considering TX fee, client-side computation, RPC roundtrips and guaranteed idempotent. + // Sadly we can't do this atomically. + let account: Account; + try { + account = await getAccount(connection, associatedToken); + } catch (error: unknown) { + // TokenAccountNotFoundError can be possible if the associated address has already received some lamports, + // becoming a system account. Assuming program derived addressing is safe, this is the only case for the + // TokenInvalidAccountOwnerError in this code path. + if ( + error instanceof TokenAccountNotFoundError || + error instanceof TokenInvalidAccountOwnerError + ) { + // As this isn't atomic, it's possible others can create associated accounts meanwhile. + try { + const transaction = new Transaction().add( + createAssociatedTokenAccountInstruction( + payer.publicKey, + associatedToken, + owner, + mint + ) + ); + + await provider.sendAndConfirm(transaction); + } catch (error: unknown) { + // Ignore all errors; for now there is no API-compatible way to selectively ignore the expected + // instruction error if the associated account exists already. + } + + // Now this should always succeed + account = await getAccount(connection, associatedToken); + } else { + throw error; + } + } + + if (!account.mint.equals(mint)) throw new TokenInvalidMintError(); + if (!account.owner.equals(owner)) throw new TokenInvalidOwnerError(); + + return account; +} + +export async function solanaHelper(args: SolanaParams): Promise { + const conn = new Connection(args.endpoint); + + async function getOrCreateTokenAccount( + mint: PublicKey, + owner: PublicKey, + provider: AnchorProvider + ) { + const tokenProgram = Spl.token(provider); + const program = Spl.associatedToken(provider); + + const [associatedToken] = await PublicKey.findProgramAddress( + [owner.toBuffer(), tokenProgram.programId.toBuffer(), mint.toBuffer()], + program.programId + ); + + try { + const tokenAccount = await tokenProgram.account.token.fetch( + associatedToken + ); + return { + address: associatedToken, + owner: tokenAccount.authority, + ...tokenAccount, + }; + } catch (e) { + try { + await program.methods + .create() + .accounts({ + mint, + owner, + associatedAccount: associatedToken, + }) + .rpc(); + + const tokenAccount = await tokenProgram.account.token.fetch( + associatedToken + ); + return { + address: associatedToken, + owner: tokenAccount.authority, + ...tokenAccount, + }; + } catch (e) { + throw e; + } + } + } + + return { + XpNft: args.xpnftAddr, + connection: conn, + async balance(address: string) { + return new BigNumber(await conn.getBalance(new PublicKey(address))); + }, + getNonce: () => Chain.SOLANA, + async transferNftToForeign(sender, chain_nonce, to, id, txFees, mintWith) { + const provider = new AnchorProvider(conn, sender, {}); + const bridgeContract = new Program( + IDL, + args.bridgeContractAddr, + provider + ); + + const [bridge, bridgeBump] = await PublicKey.findProgramAddress( + [Buffer.from("bridge")], + bridgeContract.programId + ); + + const mintAddr = new PublicKey(id.native.nftMint); + const fromTokenAcc = await getOrCreateTokenAccount( + mintAddr, + sender.publicKey, + provider + ); + const toAccount = await getOrCreateTokenAccount( + mintAddr, + bridge, + provider + ); + const tx = await bridgeContract.methods + .freezeNft( + chain_nonce, + to, + new BN(txFees.toString(10)), + mintWith, + bridgeBump + ) + .accounts({ + bridge, + authority: sender.publicKey, + from: fromTokenAcc.address, + to: toAccount.address, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .rpc(); + + await args.notifier.notifySolana(tx); + + return tx; + }, + getFeeMargin() { + return args.feeMargin; + }, + async unfreezeWrappedNft(sender, to, id, txFees, nonce) { + console.log(`Unfreezing`); + const provider = new AnchorProvider(conn, sender, {}); + const bridgeContract = new Program( + IDL, + args.bridgeContractAddr, + provider + ); + + const [bridge, bridgeBump] = await PublicKey.findProgramAddress( + [Buffer.from("bridge")], + bridgeContract.programId + ); + + const mintAddr = new PublicKey(id.native.nftMint); + + const tokenAcc = await getOrCreateAssociatedTokenAccount( + conn, + sender, + mintAddr, + sender.publicKey + ).catch((e) => { + console.error(e); + throw e; + }); + + const tx = await bridgeContract.methods + .withdrawNft( + parseInt(nonce), + to, + new BN(txFees.toString(10)), + bridgeBump + ) + .accounts({ + bridge, + authority: sender.publicKey, + mint: tokenAcc.mint, + tokenAccount: tokenAcc.address, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .rpc(); + + await args.notifier.notifySolana(tx); + + return tx; + }, + getProvider() { + return conn; + }, + async mintNft() { + /*console.log(Metaplex, walletAdapterIdentity, bundlrStorage); + console.log(args, "args"); + console.log(sender, "sender"); + const provider = new AnchorProvider(conn, sender, {}); + console.log(provider.wallet, "provider"); + + /*const txn = await conn.requestAirdrop( + sender.publicKey, + LAMPORTS_PER_SOL * 2 + ); + const block = await conn.getLatestBlockhash(); + const sig = conn.confirmTransaction( + { + blockhash: block.blockhash, + lastValidBlockHeight: block.lastValidBlockHeight, + signature: txn, + }, + "finalized" + ); + console.log(`Airdrop: ${txn}`); + console.log(`sig ${sig}`); + console.log(`Waiting for 5s`); + await new Promise((r) => setTimeout(r, 5000)); + //sender.payer.secretKey. + const _metaplex = Metaplex.make(conn) + .use(walletAdapterIdentity(sender)) + .use(bundlrStorage()); + const nftc = _metaplex.nfts(); + + const _col = await nftc.create( + { + name: "Uniair1", + symbol: "UNIAIRT", + + uri: args.uri, + sellerFeeBasisPoints: 0, + }, + { + commitment: "processed", + } + ); + + console.log(_col);*/ + return ""; + }, + async estimateValidateTransferNft() { + return new BigNumber(0); // TODO + }, + async estimateValidateUnfreezeNft() { + return new BigNumber(0); // TODO + }, + async validateAddress(adr) { + try { + new PublicKey(adr); + return true; + } catch { + return false; + } + }, + }; +} diff --git a/src/helpers/tezos.ts b/src/helpers/tezos.ts new file mode 100644 index 000000000..3ab0276e2 --- /dev/null +++ b/src/helpers/tezos.ts @@ -0,0 +1,343 @@ +import { + BalanceCheck, + Chain, + ChainNonceGet, + EstimateTxFees, + MintNft, + NftInfo, + PreTransfer, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, +} from ".."; +import { + BigMapAbstraction, + ContractAbstraction, + ContractMethod, + ContractProvider, + MichelsonMap, + SendParams, + Signer, + TezosToolkit, + TransactionOperation, + TransactionWalletOperation, + Wallet, + WalletProvider, +} from "@taquito/taquito"; + +import * as utils from "@taquito/utils"; +import BigNumber from "bignumber.js"; +import { EvNotifier } from "../notifier"; +import { + FeeMargins, + GetFeeMargins, + WhitelistCheck, + GetTokenURI, + TransferNftForeignBatch, + UnfreezeForeignNftBatch, + EstimateTxFeesBatch, +} from "./chain"; + +type TezosSigner = WalletProvider | Signer; + +export type TezosNftInfo = { + contract: string; + token_id: string; + amt: number; +}; + +type TezosMintArgs = { + identifier: string; + contract: string; + uri: string; + to: string; + amt: number; +}; + +export type TezosHelper = TransferNftForeign< + TezosSigner, + TezosNftInfo, + string +> & + MintNft & + BalanceCheck & + UnfreezeForeignNft & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & + EstimateTxFeesBatch & + ValidateAddress & + EstimateTxFees & + ChainNonceGet & + Pick, "preTransfer"> & { + isApprovedForMinter( + nft: NftInfo, + signer: TezosSigner + ): Promise; + } & { + approveForMinter( + address: NftInfo, + sender: TezosSigner + ): Promise; + } & { + XpNft: string; + XpNft1155: string; + } & GetFeeMargins & + WhitelistCheck & + GetTokenURI; + +export type TezosParams = { + Tezos: TezosToolkit; + notifier: EvNotifier; + xpnftAddress: string; + bridgeAddress: string; + validators: string[]; + feeMargin: FeeMargins; +}; + +export async function tezosHelperFactory({ + Tezos, + notifier, + xpnftAddress, + bridgeAddress, + validators, + feeMargin, +}: TezosParams): Promise { + const estimateGas = (validators: string[], baseprice: number) => { + return new BigNumber(baseprice * (validators.length + 1)); + }; + + async function withContract( + sender: TezosSigner, + contract: string, + cb: ( + contract: ContractAbstraction + ) => ContractMethod, + params?: Partial + ) { + if ("publicKeyHash" in sender) { + Tezos.setSignerProvider(sender); + + const contractI = await Tezos.contract.at(contract); + + const res = cb(contractI); + const tx = await res.send(params); + await tx.confirmation(); + return (tx as TransactionOperation).hash; + } else { + Tezos.setWalletProvider(sender); + const contractI = await Tezos.wallet.at(contract); + + const res = cb(contractI); + + const estim = await Tezos.estimate + .transfer(res.toTransferParams(params)) + .catch(() => ({ storageLimit: 0 })); + + if (params) { + if (!params.storageLimit) params.storageLimit = estim.storageLimit; + } else { + params = { storageLimit: estim.storageLimit }; + } + const tx = await res.send(params); + await tx.confirmation(); + return (tx as TransactionWalletOperation).opHash; + } + } + + function withBridge( + sender: TezosSigner, + cb: ( + bridge: ContractAbstraction + ) => ContractMethod, + params?: Partial + ) { + return withContract(sender, bridgeAddress, cb, params); + } + + function getAddress(sender: TezosSigner) { + if ("publicKeyHash" in sender) { + return sender.publicKeyHash(); + } else { + return sender.getPKH(); + } + } + + async function isApprovedForMinter( + nft: NftInfo, + sender: TezosSigner + ) { + const owner = await getAddress(sender); + const contract = await Tezos.contract.at(nft.native.contract); + const storage = await contract.storage<{ + operators?: BigMapAbstraction; + operator?: BigMapAbstraction; + }>(); + + const storageOperator = storage.operator || storage.operators; + const args = storage.operator + ? [bridgeAddress, nft.native.token_id, owner] + : { + owner, + operator: bridgeAddress, + token_id: nft.native.token_id, + }; + + const op = await storageOperator?.get(args); + + return op != undefined; + } + + async function notifyValidator(hash: string): Promise { + await notifier.notifyTezos(hash); + } + + async function preTransfer(signer: TezosSigner, nft: NftInfo) { + if (await isApprovedForMinter(nft, signer)) { + return; + } + const owner = await getAddress(signer); + return await withContract(signer, nft.native.contract, (contract) => + contract.methods.update_operators([ + { + add_operator: { + owner, + operator: bridgeAddress, + token_id: nft.native.token_id, + }, + }, + ]) + ); + } + + let transferNft = async ( + sender: TezosSigner, + chain: number, + to: string, + nft: NftInfo, + fee: BigNumber, + mw: string, + amt: number + ) => { + // await preTransfer(sender, nft); + const hash = await withBridge( + sender, + (bridge) => + bridge.methodsObject.freeze_fa2({ + fa2_address: nft.collectionIdent, + token_id: parseInt(nft.native.token_id), + chain_nonce: chain, + to, + mint_with: mw, + amt, + }) as any, + { amount: fee.toNumber() / 1e6 } + ); + + notifyValidator(hash); + return hash; + }; + + let unfreezeWrappedNft = async ( + sender: TezosSigner, + to: string, + nft: NftInfo, + fee: BigNumber, + nonce: number, + amt: number + ) => { + const hash = await withBridge( + sender, + (bridge) => { + return bridge.methodsObject.withdraw_nft({ + amt, + burner: nft.native.contract, + chain_nonce: nonce, + to, + token_id: parseInt(nft.native.token_id), + }) as any; + }, + { amount: fee.toNumber() / 1e6 } + ); + + notifyValidator(hash); + return hash; + }; + + return { + XpNft: xpnftAddress, + XpNft1155: xpnftAddress, + transferNftToForeign: (sender, chain, to, nft, fee, mw) => + transferNft(sender, chain, to, nft, fee, mw, 1), + + transferNftBatchToForeign: ( + sender, + chain_nonce, + to, + id, + mintWith, + txFees + ) => + transferNft(sender, chain_nonce, to, id[0], txFees, mintWith, id.length), + async balance(address) { + return new BigNumber((await Tezos.tz.getBalance(address)).toString(10)); + }, + unfreezeWrappedNftBatch: (sender, chainNonce, to, nfts, txFees) => + unfreezeWrappedNft(sender, to, nfts[0], txFees, chainNonce, nfts.length), + unfreezeWrappedNft: (sender, to, nft, txFees, chainNonce) => + unfreezeWrappedNft(sender, to, nft, txFees, parseInt(chainNonce), 1), + async mintNft(signer, { identifier, contract, uri, to, amt }) { + const metadata = new MichelsonMap(); + metadata.set("", utils.char2Bytes(uri)); + return await withContract(signer, contract, (umt) => + umt.methods.mint(to, amt, metadata, identifier) + ); + }, + async validateAddress(adr) { + return Promise.resolve( + utils.validateAddress(adr) === utils.ValidationResult.VALID + ); + }, + getNonce() { + return Chain.TEZOS; + }, + getFeeMargin() { + return feeMargin; + }, + async estimateValidateTransferNft() { + return estimateGas(validators, 1.2e5); + }, + async estimateValidateUnfreezeNft() { + return estimateGas(validators, 1.2e4); + }, + async estimateValidateTransferNftBatch(_, ids) { + return estimateGas(validators, 1.2e5 * ids.length); + }, + async estimateValidateUnfreezeNftBatch(_, ids) { + return estimateGas(validators, 1.2e4 * ids.length); + }, + preTransfer, + isApprovedForMinter, + approveForMinter: (nft, sender) => preTransfer(sender, nft), + async isNftWhitelisted(nft) { + const bridge = await Tezos.contract.at(bridgeAddress); + const storage = await bridge.storage<{ + nft_whitelist: BigMapAbstraction; + }>(); + const whitelisted = await storage.nft_whitelist.get(nft.native.contract); + + return whitelisted == 2; + }, + async getTokenURI(contract, tokenId) { + if (utils.validateAddress(contract) && tokenId) { + const _contract = await Tezos.contract.at(contract); + + const storage = (await _contract.storage()) as any; + const tokenStorage = await storage.token_metadata.get(tokenId); + if (tokenStorage) { + return utils.bytes2Char(tokenStorage.token_info?.get("")); + } + } + return ""; + }, + }; +} diff --git a/src/helpers/ton-bridge.ts b/src/helpers/ton-bridge.ts new file mode 100644 index 000000000..53cfdb783 --- /dev/null +++ b/src/helpers/ton-bridge.ts @@ -0,0 +1,126 @@ +import BN from "bn.js"; +import TonWeb, { ContractMethods, ContractOptions } from "tonweb"; +import { HttpProvider } from "tonweb/dist/types/providers/http-provider"; + +const Contract = TonWeb.Contract; +const Cell = TonWeb.boc.Cell; + +declare type SeqnoMethod = () => SeqnoMethodResult; + +interface SeqnoMethodResult { + call: () => Promise; +} + +interface BridgeOptions extends ContractOptions { + burner: string; +} +interface BridgeMethods extends ContractMethods { + seqno: SeqnoMethod; + getPublicKey: () => Promise; + isInitialized: () => Promise; + getActionId: () => Promise; + getWhitelist: () => Promise; +} + +interface WithdrawParams { + chainNonce: number; + to: Uint8Array; + txFees: BN; +} + +interface FreezeParams { + chainNonce: number; + to: Uint8Array; + mintWith: Uint8Array; + amount?: number | BN; +} + +export class BridgeContract extends Contract { + constructor(provider: HttpProvider, options: BridgeOptions) { + super(provider, options); + + this.methods.getPublicKey = this.getPublicKey; + this.methods.isInitialized = this.isInitialized; + this.methods.getActionId = this.getActionId; + this.methods.getWhitelist = this.getWhitelist; + } + + serializeUri(uri: string): Uint8Array { + return new TextEncoder().encode(encodeURI(uri)); + } + + async createWithdrawBody(params: WithdrawParams) { + const cell = new Cell(); + cell.bits.writeUint(0x5fcc3d14, 32); // transfer op + cell.bits.writeUint(0, 64); + cell.bits.writeAddress(new TonWeb.Address(this.options.burner)); // target address + cell.bits.writeAddress(await this.getAddress()); // bridge as response address + cell.bits.writeBit(false); // null custom_payload + cell.bits.writeCoins(new BN(0)); // forward amount + cell.bits.writeBit(true); // forward_payload in this slice, not separate cell + + const msg = new Cell(); + msg.bits.writeUint(params.chainNonce, 8); + msg.bits.writeUint(params.to.length, 16); + msg.bits.writeBytes(params.to); + msg.bits.writeBytes(new Uint8Array(12)); + cell.refs[0] = msg; + + return cell; + } + + async createFreezeBody(params: FreezeParams) { + const cell = new Cell(); + cell.bits.writeUint(0x5fcc3d14, 32); // transfer op + cell.bits.writeUint(0, 64); + cell.bits.writeAddress(await this.getAddress()); // target address + cell.bits.writeAddress(undefined); // undefined as response address + cell.bits.writeBit(false); // null custom_payload + cell.bits.writeCoins(params.amount || new BN(0)); + cell.bits.writeBit(false); // forward_payload in this slice, not separate cell + + const payload = new Cell(); + payload.bits.writeUint(params.chainNonce, 8); + payload.bits.writeUint(params.to.length, 16); + payload.bits.writeBytes(params.to); + payload.bits.writeBytes(params.mintWith); + cell.refs[0] = payload; + return cell; + } + + getPublicKey = async () => { + const address = await this.getAddress(); + const result = await this.provider.call2( + address.toString(), + "get_public_key" + ); + return result; + }; + + isInitialized = async () => { + const address = await this.getAddress(); + const result = await this.provider.call2( + address.toString(), + "is_initialized" + ); + return result; + }; + + getActionId = async () => { + const address = await this.getAddress(); + const result = await this.provider.call2( + address.toString(), + "get_action_id" + ); + return result; + }; + + getWhitelist = async () => { + const address = await this.getAddress(); + const result = await this.provider.call2( + address.toString(), + "get_whitelist" + ); + return result; + }; +} diff --git a/src/helpers/ton.ts b/src/helpers/ton.ts new file mode 100644 index 000000000..27fef3afd --- /dev/null +++ b/src/helpers/ton.ts @@ -0,0 +1,471 @@ +import { BN } from "@project-serum/anchor"; +import BigNumber from "bignumber.js"; +import TonWeb from "tonweb"; +import TonWebMnemonic from "tonweb-mnemonic"; +import type { Cell } from "tonweb/dist/types/boc/cell"; +import { Cell as CellF } from "ton"; +import { Chain } from "../consts"; +import { EvNotifier } from "../notifier"; +import { + ChainNonceGet, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + TransferNftForeign, + UnfreezeForeignNft, + ValidateAddress, + BalanceCheck, +} from "./chain"; + +import { PreTransfer } from ".."; + +import { BridgeContract } from "./ton-bridge"; + +import { Emitter } from "../emitter"; + +import { TonhubConnector, TonhubTransactionResponse } from "ton-x"; +import { fromUint8Array } from "js-base64"; +import axios from "ton/node_modules/axios"; + +export type TonSigner = { + wallet?: TonWallet; + accIdx: number; +}; + +export type TonWalletProvider = { + isTonWallet: boolean; + send(method: string, params?: any[]): Promise; + onSuccess?(): Promise; + on(eventName: string, handler: (...data: any[]) => any): void; +}; + +export type TonArgs = { + wallet: TonhubConnector & TonWalletProvider & Function; + config: { + seed?: string; + appPublicKey?: string; + address?: string; + [x: string]: any; + }; +}; + +export type TonNft = { + nftItemAddr: string; +}; + +export type TonHelper = ChainNonceGet & + BalanceCheck & + PreTransfer & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ValidateAddress & { XpNft: string } & { + tonKpWrapper: (kp: TonWebMnemonic.KeyPair) => TonSigner; + tonHubWrapper: (args: TonArgs) => TonSigner; + tonWalletWrapper: (args: TonArgs) => TonSigner; + tonKeeperWrapper: (args: TonArgs) => TonSigner; + } & GetFeeMargins; + +export type TonParams = { + tonweb: TonWeb; + notifier: EvNotifier; + bridgeAddr: string; + burnerAddr: string; + xpnftAddr: string; + feeMargin: FeeMargins; +}; + +type MethodMap = { + ton_requestAccounts: [undefined, string]; + ton_sendTransaction: [{ value: string; to: string; data: Cell }, unknown]; + ton_getBalance: [undefined, string]; +}; + +type ResponseUnionType = boolean & + TonhubTransactionResponse & { + hash: string; + }; + +type TonWallet = { + send( + method: M, + params: MethodMap[M][0] + ): Promise; + onSuccess?(): Function; + handleResponse(res: ResponseUnionType): Promise; +}; + +export async function tonHelper(args: TonParams): Promise { + const bridge = new BridgeContract(args.tonweb.provider, { + address: args.bridgeAddr, + burner: args.burnerAddr, + }); + + const ton = args.tonweb as TonWeb & TonWallet; + ton.provider.sendBoc = (b) => + ton.provider.send("sendBocReturnHash", { boc: b }); + + async function waitTonTrx( + exBodyMsg: string, + value: string, + address: string, + msgType: "in_msg" | "out_msgs" + ) { + console.log(exBodyMsg, "TON:exBodyMsg"); + + let body: string = ""; + let stop = false; + let fastResolve: any; + const setStop = () => { + stop = true; + Emitter?.removeEventListener("cancel tonKeeper", setStop); + fastResolve(true); + throw new Error("User has declined transaction"); + }; + const noTrx = setTimeout(() => { + stop = true; + throw new Error("waitTonTrx timeout"); + }, 60 * 1000 * 20); + + Emitter?.addEventListener("cancel tonKeeper", setStop); + + await new Promise((r) => { + setTimeout(r, 10 * 1000); + }); + + async function getUserTrxs(address: string): Promise { + try { + await new Promise((r) => { + setTimeout(r, 30 * 1000); + }); + const trxs = await ton.provider.getTransactions(address, 20); + return trxs; + } catch (e) { + console.log(e, "new iterration 30 sec"); + return await getUserTrxs(address); + } + } + + while (!body) { + console.log("TON:tring to find the trx..."); + + if (stop) return; + //get last 20 trx of address + const timeout = setTimeout(() => { + throw new Error("TON: timeout when trying to send trx"); + }, 60 * 1000 * 10); + const trxs = await getUserTrxs(address); + if (trxs) { + clearTimeout(timeout); + } + + //find body of the trx + body = trxs.find((trx: any) => { + const messages = trx[msgType]; + let message: string = ""; + let msgVal: string = ""; + + message = Array.isArray(messages) + ? messages?.at(0)?.msg_data?.body + : messages?.msg_data?.body; + msgVal = Array.isArray(trx["out_msgs"]) + ? trx.out_msgs?.at(0)?.value + : trx["out_msgs"].value; + + trx.utime * 1000 >= +new Date(Date.now() - 1000 * 60 * 5) && + console.log(trx.utime, "trx happend no more than 5 minutes ago"); + + return message === exBodyMsg && msgVal === value; + })?.data; + } + + clearTimeout(noTrx); + + const dict = CellF.fromBoc(Buffer.from(body, "base64"))[0].hash(); + + const exHash = dict.toString("base64"); + console.log(exHash, "exHash"); + + let trxData: any = undefined; + + while (trxData === undefined) { + await new Promise((r) => setTimeout(r, 6 * 1000)); + const res = await axios( + `https://toncenter.com/api/index/getTransactionByHash?tx_hash=${encodeURIComponent( + exHash + )}&include_msg_body=true` + ).catch(() => undefined); + + trxData = res?.data; + } + + return trxData[0]["in_msg"].hash; + } + + return { + preTransfer: () => Promise.resolve(true), + preUnfreeze: () => Promise.resolve(true), + getNonce: () => Chain.TON, + XpNft: args.xpnftAddr, + async balance(address: string) { + return new BigNumber(await ton.getBalance(address)); + }, + async estimateValidateTransferNft() { + return new BigNumber(0); // TODO + }, + async estimateValidateUnfreezeNft() { + return new BigNumber(0); // TODO + }, + async validateAddress(adr) { + return TonWeb.Address.isValid(adr); + }, + getFeeMargin() { + return args.feeMargin; + }, + async transferNftToForeign(signer, chainNonce, to, nft, txFees, mintWith) { + const rSigner = signer.wallet || ton; + + const txFeesFull = new BN(txFees.toString(10)).add( + TonWeb.utils.toNano((Math.random() * 0.01).toFixed(7)) + ); + + const nftFee = TonWeb.utils.toNano("0.07"); + + const payload = await bridge.createFreezeBody({ + amount: txFeesFull.sub(nftFee), + to: Buffer.from(to), + chainNonce, + mintWith: Buffer.from(mintWith), + }); + + console.log(txFeesFull.toString(10), "val"); + + console.log("TON:transferNftToForeign"); + console.log(nft.native.nftItemAddr); + const res = (await rSigner.send("ton_sendTransaction", { + value: txFeesFull.toString(10), + to: nft.native.nftItemAddr, + data: payload, + })) as ResponseUnionType; + + const hash = await rSigner.handleResponse(res); + + await args.notifier.notifyTon(hash); + + return hash; + }, + async unfreezeWrappedNft(signer, to, nft, _txFees, chainNonce) { + const rSigner = signer.wallet || ton; + + const value = new BN(_txFees.toString(10)).add( + TonWeb.utils.toNano((Math.random() * 0.01).toFixed(7)) + ); + + const nftFee = TonWeb.utils.toNano("0.05"); + + const payload = await bridge.createWithdrawBody({ + to: new Uint8Array(Buffer.from(to)), + chainNonce: parseInt(chainNonce), + txFees: value.sub(nftFee), + }); + + console.log(value.toString(10), "v"); + console.log(nft.native.nftItemAddr); + console.log("TON:unfreezeWrappedNft"); + + const res = (await rSigner.send("ton_sendTransaction", { + value: new BN(value).toString(10), + to: nft.native.nftItemAddr, + data: payload, + })) as ResponseUnionType; + + const hash = await rSigner.handleResponse(res); + + await args.notifier.notifyTon(hash); + + return hash; + }, + tonKeeperWrapper(args: TonArgs) { + console.log(args, "args"); + let payload: string = ""; + let value = ""; + const tonHub: TonWallet = { + async send(method, params) { + switch (method) { + case "ton_sendTransaction": + payload = fromUint8Array(await params!.data.toBoc(false)); + value = params!.value; + return args.wallet.send( + `https://app.tonkeeper.com/transfer/${ + params!.to + }?amount=${new BN(value).toString(10)}&bin=${encodeURIComponent( + payload + )}&open=1` + ); + //! + default: + return null; + } + }, + + async handleResponse(res: boolean) { + console.log(res); + const result = await waitTonTrx( + payload, + value, + args.config.address!, + "out_msgs" + ); + args.wallet.onSuccess && args.wallet.onSuccess(); + return result; + }, + }; + + return { + wallet: tonHub, + accIdx: 0, + }; + }, + tonWalletWrapper(args: TonArgs) { + let payload: string = ""; + let value = ""; + const tonHub: TonWallet = { + async send(method, params) { + switch (method) { + case "ton_sendTransaction": + value = params!.value; + + payload = fromUint8Array(await params!.data.toBoc(false)); + console.log(payload, "payload"); + return await args.wallet.send("ton_sendTransaction", [ + { + to: params!.to, + value, + dataType: "boc", + data: payload, + }, + ]); + default: + return null; + } + }, + + async handleResponse(res: boolean) { + return ( + res && + (await waitTonTrx(payload, value, args.config.address!, "out_msgs")) + ); + }, + }; + + return { + wallet: tonHub, + accIdx: 0, + }; + }, + tonHubWrapper(args: TonArgs) { + let value = ""; + const tonHub: TonWallet = { + async send(method, params) { + switch (method) { + case "ton_sendTransaction": + value = new BN(params!.value).toString(); + return await args.wallet.requestTransaction({ + seed: args.config.seed!, + appPublicKey: args.config.appPublicKey!, + to: params!.to, + value, + timeout: 5 * 60 * 1000, + text: `ton_sendTransaction to ${params!.to}`, + payload: fromUint8Array(await params!.data.toBoc(false)), + }); + + default: + return null; + } + }, + + async handleResponse(res: TonhubTransactionResponse) { + if (res.type === "success" && res.response != undefined) { + return await waitTonTrx( + res.response, + value, + args.config.address!, + "in_msg" + ); + } else { + throw new Error(`TonHub:${res.type}`); + } + }, + }; + + return { + wallet: tonHub, + accIdx: 0, + }; + }, + tonKpWrapper(kp: TonWebMnemonic.KeyPair): TonSigner { + const wallet = new TonWeb.Wallets.all.v3R2(ton.provider, { + publicKey: kp.publicKey, + wc: 0, + }); + + const wWallet: TonWallet = { + async send(method, params) { + switch (method) { + case "ton_getBalance": + return await ton.getBalance(await wallet.getAddress()); + case "ton_requestAccounts": + return [await wallet.getAddress()]; + case "ton_sendTransaction": + return await wallet.methods + .transfer({ + secretKey: kp.secretKey, + toAddress: params!.to, + amount: new BN(params!.value), + seqno: (await wallet.methods.seqno().call()) || 0, + sendMode: 3, + payload: params!.data, + }) + .send(); + } + }, + async handleResponse(res: { hash: string }) { + return res.hash; + }, + }; + + return { + wallet: wWallet, + accIdx: 0, + }; + }, + }; +} + +/** + * + * const ton = new TonWeb( + new TonWeb.HttpProvider("https://toncenter.com/api/v2/jsonRPC", { + apiKey: + "05645d6b549f33bf80cee8822bd63df720c6781bd00020646deb7b2b2cd53b73", + }) + ); + + const trxs = await ton.provider.getTransactions( + "EQBhSfdrfydwE4Sl4-sWUYhNHsQcVTGR3p2JA14C2_PNdgfs", + 20 + ); + + console.log(trxs); + + let data = new Cell(); + console.log(data); + const dict = Cell.fromBoc( + Buffer.from( + "te6cckECDAEAAtkAA7V2FJ92t/J3AThKXj6xZRiE0exBxVMZHenYkDXgLb8812AAAdm2v+2EFpyXsCyPQOlDXCGvDlGdb9/YPNRPgD98AgAsIvgTYcYAAAHZqugyeDY2O1EgADRtIKRIAQIDAgHgBAUAgnIXMm/rsAMDO9FDdU/1I47b332HXYKcIvfN53pZj/VL8XxAXw8HICdzOmVFlgwy6XfTfJTbuplVQh4PnMQir/B3AhEMgouGGZPPBEAKCwHhiADCk+7W/k7gJwlLx9YsoxCaPYg4qmMjvTsSBrwFt+ea7AHPX0P+BlViv5FLRo4uUALd1xnuqimnA//t0BCCufv3iVjYINGcRw+ljDnirrtKYcGN629BfyEuTEj2eIBH7pAxTU0YuxsdqmAAAABAABwGAQHfBwFoYgBuLG9sHzPjFfimuHMhmTMm2J2PjG2QS0wA58SpRc6PpiAmJaAAAAAAAAAAAAAAAAAAAQgBsWgAwpPu1v5O4CcJS8fWLKMQmj2IOKpjI707Ega8Bbfnmu0ANxY3tg+Z8Yr8U1w5kMyZk2xOx8Y2yCWmAHPiVKLnR9MQExLQAAYuoZgAADs21/2whMbHaiTACAGfX8w9FAAAAAAAAAAAgAhTrcJncddU9sZlDMvNz2ZSqJDp5YplXYGBr0ckiINkEAPcWJzy2hGXRIgyzC2jzCbLkfjUINlQYAjIgr3kCXkEFBgJAHIHACoweDQ3QmYwZGFlNmU5MmU0OWEzYzk1ZTViMGM3MTQyMjg5MUQ1Y2Q0RkUAAAAAAAAAAAAAAAAAnUGdgxOIAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAb8mRfJBMLqFQAAAAAAACAAAAAAADChE7JLQbmSipXzKEUnUNwnWjHPBXefxRxAbt/uNGHeZA0DgsouCJ3A==", + "base64" + ) + )[0].hash(); + console.log("Hash: " + dict.toString("base64")); + */ diff --git a/src/helpers/tron.ts b/src/helpers/tron.ts new file mode 100644 index 000000000..254df7352 --- /dev/null +++ b/src/helpers/tron.ts @@ -0,0 +1,483 @@ +import { BigNumber } from "bignumber.js"; +import { + BalanceCheck, + EstimateTxFees, + FeeMargins, + GetFeeMargins, + MintNft, + TransferNftForeign, + UnfreezeForeignNft, +} from "./chain"; + +// @ts-expect-error no types cope +import { TronWeb } from "tronweb"; +// @ts-expect-error no types cope +import TronStation from "tronstation"; +import { EthNftInfo, MintArgs } from "./web3"; +import { BigNumber as EthBN } from "ethers"; + +import { + Minter__factory, + UserNftMinter__factory, + XPNft__factory, + XPNft1155__factory, +} from "xpnet-web3-contracts"; +import { + Approve, + Chain, + ExtractAction, + ExtractTxnStatus, + IsApproved, + PreTransfer, + PreTransferRawTxn, + TransactionStatus, + ValidateAddress, + WhitelistCheck, + GetTokenURI, +} from ".."; +import { ChainNonceGet, NftInfo } from ".."; +import { EvNotifier } from "../notifier"; + +// Uses default private key in provider if sender is undefinedd +type TronSender = string | undefined; + +export type MinterRes = { + // Minter smart contract + minter: string; + // XPNFT (Wrapper for foreign NFTs) contracte + xpnft: string; + // XPNFT1155 (Wrapper for ERC1155 Foreign NFTs) contract + xpnft1155: string; + // Whitelisted Native NFT contracts + whitelist: string[]; +}; + +export type BaseTronHelper = BalanceCheck & + MintNft & { + /** + * + * Deploy an ERC721 user minter smart contract + * + * @argument deployer deployer of this smart contract + * @returns Address of the deployed smart contract + */ + deployErc721(deployer: TronSender): Promise; + /** + * Deploy Minter Smart Contract + * + * @argument deployer deployer of the smart contract + * @argument frostGroupKey FROST SECP256k1 Group Key + * @argument xpnftPrefix XP Wrapped NFT backend with "/" suffix + * @argument xpnftPrefix1155 XP Wrapped NFT Backend in erc1155 format (with {id}) + * @argument whitelist List of NFTs to whitelist + */ + deployMinter( + deployer: TronSender, + frostGroupKey: string, + xpnftPrefix: string, + xpnftPrefix1155: string, + whitelist?: string[] + ): Promise; + }; + +export type TronHelper = BaseTronHelper & + TransferNftForeign & + UnfreezeForeignNft & + EstimateTxFees & + ChainNonceGet & + Approve & + ValidateAddress & + IsApproved & + ExtractAction & + Pick, "preTransfer"> & + PreTransferRawTxn & + ExtractTxnStatus & + WhitelistCheck & { + XpNft: string; + XpNft1155: string; + } & GetFeeMargins & + GetTokenURI; + +export async function baseTronHelperFactory( + provider: TronWeb +): Promise { + const setSigner = (signer: TronSender) => { + return signer && provider.setPrivateKey(signer); + }; + + const deployErc721_i = async (deployer: TronSender) => { + setSigner(deployer); + + const contract = await provider.contract().new({ + abi: UserNftMinter__factory.abi, + bytecode: UserNftMinter__factory.bytecode, + feeLimit: 3000000000, + }); + + return contract; + }; + + const deployXpNft = async (deployer: TronSender, nftPrefix: string) => { + setSigner(deployer); + + const contract = await provider.contract().new({ + abi: XPNft__factory.abi, + bytecode: XPNft__factory.bytecode, + feeLimit: 3000000000, + parameters: ["XPNFT", "XPNFT", nftPrefix], + }); + + return contract; + }; + + const deployXpNft1155 = async (deployer: TronSender, nftPrefix: string) => { + setSigner(deployer); + const contract = await provider.contract().new({ + abi: XPNft1155__factory.abi, + bytecode: XPNft1155__factory.bytecode, + feeLimit: 3000000000, + parameters: [nftPrefix], + }); + + return contract; + }; + + return { + async mintNft(owner: TronSender, options: MintArgs): Promise { + setSigner(owner); + const erc = await provider.contract( + UserNftMinter__factory.abi, + options.contract + ); + const res = await erc.mint(options.uri).send(); + return res; + }, + async balance(address: string): Promise { + const balance = await provider.trx.getBalance(address); + return new BigNumber(balance); + }, + deployErc721: async (owner) => + await deployErc721_i(owner).then((c) => c.address), + async deployMinter( + deployer: TronSender, + frostGroupKey, + xpnftPrefix, + xpnftPrefix1155, + whitelist: string[] = [] + ): Promise { + if (whitelist.length == 0) { + const unft = await deployErc721_i(deployer); + console.log(provider.address.fromHex(unft.address)); + whitelist.push(provider.address.fromHex(unft.address)); + } + + const gk = Buffer.from(frostGroupKey, "hex"); + const gkx = EthBN.from(`0x${gk.slice(1).toString("hex")}`); + // gkyp is either 0 or 1 + const gkyp = EthBN.from(`0x${gk[0] & 1}`); + + const erc721 = await deployXpNft(deployer, xpnftPrefix); + const erc1155 = await deployXpNft1155(deployer, xpnftPrefix1155); + + const minter = await provider.contract().new({ + abi: Minter__factory.abi, + bytecode: Minter__factory.bytecode, + feeLimit: 6000000000, + parameters: [gkx, gkyp, whitelist], + }); + + await erc721.transferOwnership(minter.address).send(); + await erc1155.transferOwnership(minter.address).send(); + const minterAddress: string = provider.address.fromHex(minter.address); + const erc721Address: string = provider.address.fromHex(erc721.address); + const erc1155Address: string = provider.address.fromHex(erc1155.address); + return { + minter: minterAddress, + xpnft: erc721Address, + xpnft1155: erc1155Address, + whitelist, + }; + }, + }; +} + +export interface TronParams { + provider: TronWeb; + notifier: EvNotifier; + minter_addr: string; + erc721_addr: string; + erc1155_addr: string; + validators: string[]; + feeMargin: FeeMargins; +} + +export interface TronRawTxn { + readonly visible: boolean; + readonly txID: string; + readonly raw_data: { + readonly ref_block_bytes: string; + readonly ref_block_hash: string; + expiration: number; + readonly fee_limit: number; + readonly timestamp: number; + readonly contract: { + readonly parameter: { + readonly value: { + readonly data: string; + readonly owner_address: string; + readonly contract_address: string; + }; + readonly type_url: string; + }; + readonly type: string; + }[]; + }; + readonly raw_data_hex: string; +} + +export async function tronHelperFactory( + tronParams: TronParams +): Promise { + const { provider, minter_addr } = tronParams; + // const station = new TronStation(provider); + const base = await baseTronHelperFactory(provider); + const minter = await provider.contract(Minter__factory.abi, minter_addr); + + const setSigner = (signer: TronSender) => { + return signer && provider.setPrivateKey(signer); + }; + + async function notifyValidator(hash: string): Promise { + await tronParams.notifier.notifyTron(hash); + } + + async function extractAction(hash: string): Promise { + await new Promise((r) => setTimeout(r, 10000)); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const getEv: (retries?: number) => Promise = async (retries = 0) => { + const res = await provider.getEventByTransactionID(hash); + if (res.length !== 0) { + return res; + } + if (retries > 15) { + throw Error("Couldn't fetch transaction after more than 15 retries!"); + } + await new Promise((r) => setTimeout(r, 3000)); + return getEv(retries + 1); + }; + + const evs = await getEv(); + const ev = evs.find((e: any) => e?.contract == minter_addr); + const action_id: string = ev.result["actionId"].toString(); + return action_id; + } + + // const _randomAction = () => + // Math.floor( + // Math.random() * 999 + (Number.MAX_SAFE_INTEGER - 1000) + // ).toString(); + + // async function _estimateGas( + // addrs: string[], + // func_sig: string, + // params: { type: string; value: any }[] + // ): Promise { + // let energy = 0; + // let bandwidth = 0; + // const nrgSun = await station.energy.burnedEnergy2Trx(1, { unit: "sun" }); + // const bandSun = 10; + + // for (const [i, addr] of addrs.entries()) { + // const res = await provider.transactionBuilder.triggerConstantContract( + // minter.address, + // func_sig, + // {}, + // params, + // provider.address.toHex(addr) + // ); + // let nrg: number = res["energy_used"]; + // if (i == addrs.length - 1 && addrs.length != 1) nrg *= 2; + // energy += nrg; + // const tx_raw: string = res["transaction"]["raw_data_hex"]; + // bandwidth += tx_raw.length; + // } + // // Fee = energy * (sun per energy) + bandwidth * (sun per bandwidth) + // // bandwidth = raw tx byte length + // const fee = new BigNumber(energy).times(nrgSun).plus(bandwidth * bandSun); + + // return fee; + // } + + const isApprovedForMinter = async ( + id: NftInfo, + _sender: TronSender + ) => { + const erc = await provider.contract( + UserNftMinter__factory.abi, + id.native.contract + ); + const approvedAddress = await erc.getApproved(id.native.tokenId).call({ + from: tronParams.provider.defaultAddress.base58, + }); + if (approvedAddress === minter_addr) { + return true; + } + return false; + }; + + const approveForMinter = async ( + id: NftInfo, + sender: TronSender | undefined + ) => { + await setSigner(sender); + const erc = await provider.contract( + UserNftMinter__factory.abi, + id.native.contract + ); + const isApproved = await isApprovedForMinter(id, sender); + if (isApproved) { + return undefined; + } + + const txHash: string = await erc + .approve(minter_addr, id.native.tokenId) + .send(); + return txHash; + }; + + const addMinToExpirationTime = (txn: TronRawTxn, minutes: number) => { + const expiration = txn.raw_data.expiration; + const newExpiration = new Date(expiration).getTime() + minutes * 60000; + txn.raw_data.expiration = newExpiration; + return txn; + }; + + return { + ...base, + extractAction, + XpNft1155: tronParams.erc721_addr, + XpNft: tronParams.erc721_addr, + getFeeMargin() { + return tronParams.feeMargin; + }, + approveForMinter, + preTransfer: (s, nft, _fee) => approveForMinter(nft, s), + async preTransferRawTxn(nft, address, _value) { + await setSigner(address); + const isApproved = await isApprovedForMinter(nft, address); + if (isApproved) { + return undefined; + } + const { transaction, result } = + await provider.transactionBuilder.triggerSmartContract( + nft.native.contract, + "approve(address,uint256)", + { + feeLimit: 1_000_000, + callValue: 0, + }, + [ + { + type: "address", + value: minter_addr, + }, + { + type: "uint256", + value: nft.native.tokenId, + }, + ], + address + ); + if (!result.result) { + throw new Error(result.toString()); + } + return addMinToExpirationTime(transaction, 15); + }, + isApprovedForMinter, + async extractTxnStatus(txnHash) { + const txn = await provider.trx.getConfirmedTransaction(txnHash); + const status = txn["ret"][0]["contractRet"]; + if (status === "SUCCESS") { + return TransactionStatus.SUCCESS; + } else if (status === "FAIL") { + return TransactionStatus.FAILURE; + } + return TransactionStatus.PENDING; + }, + async unfreezeWrappedNft( + sender: TronSender, + to: string, + id: NftInfo, + txFees: BigNumber, + nonce + ): Promise { + setSigner(sender); + const res = await minter + .withdrawNft(to, nonce, id.native.tokenId, id.native.contract) + .send({ callValue: EthBN.from(txFees.toFixed(0)) }); + + await notifyValidator(res); + return res; + }, + getNonce() { + return Chain.TRON; + }, + async transferNftToForeign( + sender: TronSender, + chain_nonce: number, + to: string, + id: NftInfo, + txFees: BigNumber, + mintWith + ): Promise { + setSigner(sender); + await approveForMinter(id, sender); + + const txr = await minter + .freezeErc721( + id.native.contract, + id.native.tokenId, + chain_nonce, + to, + mintWith + ) + .send({ callValue: EthBN.from(txFees.toFixed(0)) }); + + await notifyValidator(txr); + return txr; + }, + async estimateValidateTransferNft( + _to: string, + _nftUri: NftInfo + ): Promise { + return new BigNumber(0); // TODO + }, + async estimateValidateUnfreezeNft( + _to: string, + _nft: NftInfo + ): Promise { + return new BigNumber(0); // TODO + }, + async validateAddress(adr: string): Promise { + return provider.isAddress(adr); + }, + isNftWhitelisted(nft) { + return minter.nftWhitelist(nft.native.contract).call({ + from: tronParams.provider.defaultAddress.base58, + }); + }, + // const minter = await provider.contract(Minter__factory.abi, minter_addr); + async getTokenURI(contract, tokenId) { + return ""; + if (provider.isAddress(contract) && tokenId) { + const _contract = await provider.contract( + UserNftMinter__factory.abi, + contract + ); + return await _contract.tokenURI(+tokenId).call(); + } + return ""; + }, + }; +} diff --git a/src/helpers/web3.ts b/src/helpers/web3.ts index 839fa6850..2cd1a1908 100644 --- a/src/helpers/web3.ts +++ b/src/helpers/web3.ts @@ -3,250 +3,773 @@ * @module */ import BigNumber from "bignumber.js"; -import { TransferForeign, UnfreezeForeign, UnfreezeForeignNft, BalanceCheck, TransferNftForeign, WrappedBalanceCheck, BatchWrappedBalanceCheck, DecodeWrappedNft, WrappedNft, DecodeRawNft, MintNft } from "./chain"; -import { Contract, Signer, BigNumber as EthBN, ContractFactory } from 'ethers'; -import { TransactionReceipt, TransactionResponse, Provider } from "@ethersproject/providers"; -import { Interface } from "ethers/lib/utils"; -import { abi as ERC721_abi } from "../fakeERC721.json"; -import { abi as ERC1155_abi } from "../fakeERC1155.json"; -import * as ERC1155_contract from "../XPNet.json"; -import {NftEthNative, NftPacked} from "validator/dist/encoding"; -import { Base64 } from "js-base64"; -type EasyBalance = string | number | EthBN; +import { + BalanceCheck, + EstimateTxFeesBatch, + FeeMargins, + GetFeeMargins, + GetProvider, + IsContractAddress, + MintNft, + TransferNftForeign, + TransferNftForeignBatch, + UnfreezeForeignNft, + UnfreezeForeignNftBatch, + ParamsGetter, +} from "./chain"; +import { + BigNumber as EthBN, + ContractTransaction, + ethers, + PopulatedTransaction, + providers, + Signer, + VoidSigner, + Wallet, +} from "ethers"; +import { Provider, TransactionResponse } from "@ethersproject/providers"; +import { + Erc1155Minter, + Erc1155Minter__factory, + Minter__factory, + UserNftMinter, + UserNftMinter__factory, +} from "xpnet-web3-contracts"; +import { + ChainNonceGet, + EstimateTxFees, + ExtractAction, + ExtractTxnStatus, + GetTokenURI, + NftInfo, + PreTransfer, + PreTransferRawTxn, + TransactionStatus, + ValidateAddress, + WhitelistCheck, +} from ".."; +import { ChainNonce } from "../type-utils"; +import { EvNotifier } from "../notifier"; +import axios from "axios"; +import { hethers } from "@hashgraph/hethers"; /** * Information required to perform NFT transfers in this chain */ export type EthNftInfo = { - contract_type: "ERC721" | "ERC1155" - contract: string, - token: EthBN -} + chainId: string; + tokenId: string; + owner: string; + uri: string; + contract: string; + contractType: "ERC721" | "ERC1155"; +}; /** * Arguments required for minting a new nft * - * contract: address of the sc - * token: token ID of the newly minted nft + * contract: address of the sc + * token: token ID of the newly minted nft * owner: Owner of the newly minted nft * uri: uri of the nft */ export type MintArgs = { - contract: string, - token: EasyBalance, - owner: string, - uri: string + contract: string; + uri: string; +}; + +export interface IsApproved { + isApprovedForMinter( + address: NftInfo, + sender: Sender, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +export interface Approve { + approveForMinter( + address: NftInfo, + sender: Sender, + txFee: BigNumber, + gasPrice?: ethers.BigNumber + ): Promise; +} + +hethers.providers.BaseProvider.prototype.getGasPrice = async () => { + return EthBN.from("1"); }; +type NullableCustomData = Record | undefined; + /** * Base util traits */ -export type BaseWeb3Helper = BalanceCheck & - /** - * Mint an nft in the given ERC1155 smart contract - * - * @argument signer owner of the smart contract - * @argument args See [[MintArgs]] - */ - MintNft & { - /** - * - * Deploy an ERC1155 smart contract - * - * @argument owner Owner of this smart contract - * @returns Address of the deployed smart contract - */ - deployErc1155(owner: Signer): Promise; - } +export type BaseWeb3Helper = BalanceCheck & + /** + * Mint an nft in the given ERC1155 smart contract + * + * @argument signer owner of the smart contract + * @argument args See [[MintArgs]] + */ MintNft & { + /** + * Deploy an ERC721 smart contract + * + * @argument owner Owner of this smart contract + * @returns Address of the deployed smart contract + */ + deployErc721(owner: Signer): Promise; + } & { + mintNftErc1155( + owner: Signer, + options: MintArgs + ): Promise; + }; + +type ExtraArgs = { gasPrice: ethers.BigNumber }; /** * Traits implemented by this module */ export type Web3Helper = BaseWeb3Helper & - WrappedBalanceCheck & - BatchWrappedBalanceCheck & - TransferForeign & - TransferNftForeign & - UnfreezeForeign & - UnfreezeForeignNft & - DecodeWrappedNft & - DecodeRawNft & { - /** - * Get the uri of an nft given nft info - */ - nftUri(info: EthNftInfo): Promise; - }; - -function contractTypeFromNftKind(kind: 0 | 1): "ERC721" | "ERC1155" { - return kind === NftEthNative.NftKind.ERC721 ? "ERC721" : "ERC1155" -} + TransferNftForeign & + UnfreezeForeignNft & + TransferNftForeignBatch & + UnfreezeForeignNftBatch & + EstimateTxFees & + EstimateTxFeesBatch & + ChainNonceGet & + IsApproved & + Approve & + ValidateAddress & + ExtractAction & { + createWallet(privateKey: string): Wallet; + } & Pick, "preTransfer"> & + PreTransferRawTxn & + ExtractTxnStatus & + GetProvider & { + XpNft: string; + XpNft1155: string; + } & WhitelistCheck & + GetFeeMargins & + IsContractAddress & + GetTokenURI & + ParamsGetter; /** * Create an object implementing minimal utilities for a web3 chain - * + * * @param provider An ethers.js provider object */ export async function baseWeb3HelperFactory( - provider: Provider + provider: Provider, + nonce: number ): Promise { - const w3 = provider; - const erc1155_abi = new Interface(ERC1155_abi); - - return { - async balance(address: string): Promise { - const bal = await w3.getBalance(address); - - // ethers BigNumber is not compatible with our bignumber - return new BigNumber(bal.toString()); - }, - async deployErc1155( - owner: Signer - ): Promise { - const factory = ContractFactory.fromSolidity(ERC1155_contract, owner); - const contract = await factory.deploy(); - - return contract.address; - }, - async mintNft( - contract_owner: Signer, - { - contract, - token, - owner, - uri - }: MintArgs - ): Promise { - const erc1155 = new Contract(contract, erc1155_abi, contract_owner); - await erc1155.mint(owner, EthBN.from(token.toString()), 1); - await erc1155.setURI(token, uri); - } - } + const w3 = provider; + + return { + async balance(address: string): Promise { + const bal = await w3.getBalance(address); + + // ethers BigNumber is not compatible with our bignumber + return new BigNumber(bal.toString()); + }, + async deployErc721(owner: Signer): Promise { + const factory = new UserNftMinter__factory(owner); + const contract = await factory.deploy(); + + return contract.address; + }, + async mintNftErc1155(owner: Signer, { contract }) { + const erc1155 = Erc1155Minter__factory.connect(contract!, owner); + const tx = await erc1155.mintNft(await owner.getAddress()); + + return tx; + }, + async mintNft( + owner: Signer, + { contract, uri }: MintArgs + ): Promise { + const erc721 = UserNftMinter__factory.connect(contract!, owner); + const txm = await erc721 + .mint(uri, { gasLimit: 1000000 }) + .catch(async (e) => { + if (nonce === 33) { + let tx; + while (!tx) { + tx = await provider.getTransaction(e["returnedHash"]); + } + return tx; + } + throw e; + }); + return txm; + }, + }; } /** * Create an object implementing cross chain utilities for a web3 chain - * + * * @param provider An ethers.js provider object * @param minter_addr Address of the minter smart contract * @param minter_abi ABI of the minter smart contract */ +export interface Web3Params { + provider: Provider; + notifier: EvNotifier; + minter_addr: string; + erc721_addr: string; + erc1155_addr: string; + erc721Minter: string; + erc1155Minter: string; + nonce: ChainNonce; + feeMargin: FeeMargins; +} + +type NftMethodVal = { + freeze: "freezeErc1155" | "freezeErc721"; + validateUnfreeze: "validateUnfreezeErc1155" | "validateUnfreezeErc721"; + umt: typeof Erc1155Minter__factory | typeof UserNftMinter__factory; + approved: ( + umt: T, + sender: string, + minterAddr: string, + tok: string, + customData: NullableCustomData + ) => Promise; + approve: ( + umt: T, + forAddr: string, + tok: string, + txnUp: (tx: PopulatedTransaction) => Promise, + customData: NullableCustomData, + gasPrice: ethers.BigNumberish | undefined + ) => Promise; +}; + +type EthNftMethodVal = NftMethodVal; + +type NftMethodMap = Record< + "ERC1155" | "ERC721", + EthNftMethodVal | EthNftMethodVal +>; + +export const NFT_METHOD_MAP: NftMethodMap = { + ERC1155: { + freeze: "freezeErc1155", + validateUnfreeze: "validateUnfreezeErc1155", + umt: Erc1155Minter__factory, + approved: ( + umt: Erc1155Minter, + sender: string, + minterAddr: string, + _tok: string, + customData: NullableCustomData + ) => { + return umt.isApprovedForAll(sender, minterAddr, { + gasLimit: "85000", + customData, + }); + }, + approve: async ( + umt: Erc1155Minter, + forAddr: string, + _tok: string, + txnUp: (tx: PopulatedTransaction) => Promise, + customData: NullableCustomData + ) => { + const tx = await umt.populateTransaction.setApprovalForAll( + forAddr, + true, + { + gasLimit: "85000", + customData, + } + ); + await txnUp(tx); + return await umt.signer.sendTransaction(tx); + }, + }, + ERC721: { + freeze: "freezeErc721", + validateUnfreeze: "validateUnfreezeErc721", + umt: UserNftMinter__factory, + approved: async ( + umt: UserNftMinter, + _: string, + minterAddr: string, + tok: string, + customData: NullableCustomData + ) => { + return ( + ( + await umt.getApproved(tok, { + gasLimit: "85000", + customData, + //@ts-ignore + }) + ).toLowerCase() == minterAddr.toLowerCase() + ); + }, + approve: async ( + umt: UserNftMinter, + forAddr: string, + tok: string, + txnUp: (tx: PopulatedTransaction) => Promise + ) => { + const tx = await umt.populateTransaction.approve(forAddr, tok, { + gasLimit: "85000", + }); + await txnUp(tx); + return await umt.signer.sendTransaction(tx); + }, + }, +}; + export async function web3HelperFactory( - provider: Provider, - minter_addr: string, - minter_abi: Interface, - erc1155_addr: string + params: Web3Params ): Promise { - const w3 = provider; + const txnUnderpricedPolyWorkaround = + params.nonce == 7 + ? async (utx: PopulatedTransaction) => { + const res = await axios + .get( + "https://gpoly.blockscan.com/gasapi.ashx?apikey=key&method=pendingpooltxgweidata" + ) + .catch(async () => { + return await axios.get( + "https://gasstation-mainnet.matic.network/v2" + ); + }); + const { result, fast } = res.data; + const trackerGas = result?.rapidgaspricegwei || fast?.maxFee; + + if (trackerGas) { + const sixtyGwei = ethers.utils.parseUnits( + Math.ceil(trackerGas).toString(), + "gwei" + ); + utx.maxFeePerGas = sixtyGwei; + utx.maxPriorityFeePerGas = sixtyGwei; + } + } + : () => Promise.resolve(); + + const w3 = params.provider; + const { minter_addr, provider } = params; + const minter = Minter__factory.connect(minter_addr, provider); - const minter = new Contract(minter_addr, minter_abi, w3); + async function notifyValidator( + fromHash: string, + actionId?: string, + type?: string, + toChain?: number, + txFees?: string, + senderAddress?: string, + targetAddress?: string, + nftUri?: string, + tokenId?: string, + contract?: string + ): Promise { + await params.notifier.notifyWeb3( + params.nonce, + fromHash, + actionId, + type, + toChain, + txFees, + senderAddress, + targetAddress, + nftUri, + tokenId, + contract + ); + } - const erc1155_abi = new Interface(ERC1155_abi); - const erc1155 = new Contract(erc1155_addr, erc1155_abi, w3); + //@ts-ignore + async function getTransaction(hash: string) { + let trx; + let fails = 0; + while (!trx && fails < 7) { + trx = await provider.getTransaction(hash); + await new Promise((resolve) => + setTimeout(() => resolve("wait"), 5000 + fails * 2) + ); + fails++; + } + + return trx as TransactionResponse; + } - function signedMinter(signer: Signer): Contract { - return minter.connect(signer); + async function extractAction(txr: TransactionResponse): Promise { + const receipt = await txr.wait(); + const log = receipt.logs.find((log) => log.address === minter.address); + if (log === undefined) { + throw Error("Couldn't extract action_id"); } - async function extractTxn(txr: TransactionResponse, _evName: string): Promise<[TransactionReceipt, string]> { - const receipt = await txr.wait(); - const log = receipt.logs.find((log) => log.address === minter.address); - if (log === undefined) { - throw Error("Couldn't extract action_id"); - } - - const evdat = minter_abi.parseLog(log); - const action_id: string = evdat.args[0].toString(); - return [receipt, action_id]; - } - - async function nftUri( - info: EthNftInfo - ): Promise { - if (info.contract_type == "ERC721") { - const erc = new Contract(info.contract, ERC721_abi, w3); - return await erc.tokenURI(info.token); - } else { - const erc = new Contract(info.contract, erc1155_abi, w3); - return await erc.uri(info.token) - } - } - - const base = await baseWeb3HelperFactory(provider); - - return { - ...base, - async balanceWrapped(address: string, chain_nonce: number): Promise { - const bal = await erc1155.balanceOf(address, chain_nonce); - - return new BigNumber(bal.toString()); - }, - async balanceWrappedBatch(address: string, chain_nonces: number[]): Promise> { - const bals: EthBN[] = await erc1155.balanceOfBatch(Array(chain_nonces.length).fill(address), chain_nonces); - - return new Map(bals.map((v, i) => [chain_nonces[i], new BigNumber(v.toString())])); - }, - async transferNativeToForeign(sender: Signer, chain_nonce: number, to: string, value: EasyBalance): Promise<[TransactionReceipt, string]> { - const res = await signedMinter(sender) - .freeze(chain_nonce, to, { value }); - return await extractTxn(res, 'Transfer'); - }, - async transferNftToForeign(sender: Signer, chain_nonce: number, to: string, id: EthNftInfo): Promise<[TransactionReceipt, string]> { - let txr; - let ev; - const calldata = Buffer.concat([ - Buffer.from((new Int32Array([0])).buffer), // 4 bytes padidng - Buffer.from((new Int32Array([chain_nonce])).buffer).reverse(), // BE, gotta reverse - Buffer.from(to, "utf-8") - ]); - - if (id.contract_type == "ERC721") { - ev = "TransferErc721"; - const erc = new Contract(id.contract, ERC721_abi, w3); - txr = await erc.connect(sender)['safeTransferFrom(address,address,uint256,bytes)'](await sender.getAddress(), minter_addr, id.token, calldata); - } else { - ev = "TransferErc1155"; - const erc = new Contract(id.contract, erc1155_abi, w3); - txr = await erc.connect(sender).safeTransferFrom(await sender.getAddress(), minter_addr, id.token, EthBN.from(1), calldata); - } - - return await extractTxn(txr, ev); - }, - async unfreezeWrapped(sender: Signer, chain_nonce: number, to: string, value: EasyBalance): Promise<[TransactionReceipt, string]> { - const res = await signedMinter(sender) - .withdraw(chain_nonce, to, value); - - return await extractTxn(res, 'Unfreeze'); - }, - async unfreezeWrappedNft(sender: Signer, to: string, id: BigNumber): Promise<[TransactionReceipt, string]> { - const res = await signedMinter(sender) - .withdraw_nft(to, id); - - return await extractTxn(res, 'UnfreezeNft'); - }, - nftUri, - decodeWrappedNft( - raw_data: string - ): WrappedNft { - const u8D = Base64.toUint8Array(raw_data); - const packed = NftPacked.deserializeBinary(u8D); - - - return { - chain_nonce: packed.getChainNonce(), - data: packed.getData_asU8() - } - }, - async decodeUrlFromRaw( - data: Uint8Array - ): Promise { - const packed = NftEthNative.deserializeBinary(data); - const nft_info = { - contract_type: contractTypeFromNftKind(packed.getNftKind()), - contract: packed.getContractAddr(), - token: EthBN.from(packed.getId()) - } - - - return await nftUri(nft_info); - }, + const evdat = minter.interface.parseLog(log); + const action_id: string = evdat.args[0].toString(); + return action_id; + } + + const isApprovedForMinter = async ( + id: NftInfo, + signer: Signer + ) => { + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + signer + ); + const toApprove = + params.nonce !== 0x1d + ? minter_addr + : id.native.uri.includes("herokuapp.com") + ? params.minter_addr + : params.erc721_addr; + return await NFT_METHOD_MAP[id.native.contractType].approved( + erc as any, + await signer.getAddress(), + toApprove, + id.native.tokenId, + params.nonce === 0x1d ? {} : undefined + ); + }; + + const approveForMinter = async ( + id: NftInfo, + sender: Signer, + _txFees: BigNumber, + gasPrice: ethers.BigNumberish | undefined + ) => { + const isApproved = await isApprovedForMinter(id, sender); + if (isApproved) { + return undefined; } + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + sender + ); + + const toApprove = + params.nonce !== 0x1d + ? minter_addr + : id.native.uri.includes("herokuapp.com") + ? params.minter_addr + : params.erc721_addr; + + const receipt = await NFT_METHOD_MAP[id.native.contractType].approve( + erc as any, + toApprove, + id.native.tokenId, + txnUnderpricedPolyWorkaround, + params.nonce === 0x1d ? {} : undefined, + gasPrice + ); + await receipt.wait(); + return receipt.hash; + }; + + const base = await baseWeb3HelperFactory(params.provider, params.nonce); + + return { + ...base, + XpNft: params.erc721_addr, + XpNft1155: params.erc1155_addr, + getParams: () => params, + approveForMinter, + getProvider: () => provider, + async estimateValidateUnfreezeNft(_to, _id, _mW) { + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + }, + getFeeMargin() { + return params.feeMargin; + }, + isApprovedForMinter, + preTransfer: (s, id, fee, args) => + approveForMinter(id, s, fee, args?.gasPrice), + extractAction, + async isContractAddress(address) { + const code = await provider.getCode(address); + return code !== "0x"; + }, + getNonce: () => params.nonce, + async preTransferRawTxn(id, address, _value) { + const isApproved = await isApprovedForMinter( + id, + new VoidSigner(address, provider) + ); + + if (isApproved) { + return undefined; + } + + const erc = UserNftMinter__factory.connect( + id.native.contract, + new VoidSigner(address, provider) + ); + + const approvetxn = await erc.populateTransaction.approve( + minter_addr, + id.native.tokenId + ); + + return approvetxn; + }, + + async extractTxnStatus(txn) { + const status = (await (await provider.getTransaction(txn)).wait()).status; + if (status === undefined) { + return TransactionStatus.PENDING; + } + if (status === 1) { + return TransactionStatus.SUCCESS; + } else if (status === 0) { + return TransactionStatus.FAILURE; + } + return TransactionStatus.UNKNOWN; + }, + async getTokenURI(contract, tokenId) { + if (ethers.utils.isAddress(contract) && tokenId) { + const erc721 = UserNftMinter__factory.connect(contract!, provider); + //const erc1155 = Erc1155Minter__factory.connect(contract!, provider) + //erc1155.uri() + return await erc721.tokenURI(tokenId).catch(() => ""); + } + return ""; + }, + async unfreezeWrappedNftBatch(signer, chainNonce, to, nfts, txFees) { + const tx = await minter + .connect(signer) + .populateTransaction.withdrawNftBatch( + to, + chainNonce, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + nfts[0].native.contract, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + const res = await signer.sendTransaction(tx); + + // await notifyValidator( + // res.hash, + // await extractAction(res), + // "Unfreeze", + // chainNonce.toString(), + // txFees.toString(), + // await signer.getAddress(), + // to, + // res.data + // ); + await notifyValidator(res.hash); + + return res; + }, + async transferNftBatchToForeign( + signer, + chainNonce, + to, + nfts, + mintWith, + txFees + ) { + const tx = await minter + .connect(signer) + .populateTransaction.freezeErc1155Batch( + nfts[0].native.contract, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + chainNonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)), + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const res = await signer.sendTransaction(tx); + + await notifyValidator(res.hash); + + return res; + }, + async estimateValidateTransferNftBatch(_to, nfts, _mintWith) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + async estimateValidateUnfreezeNftBatch(_to, nfts) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + createWallet(privateKey: string): Wallet { + return new Wallet(privateKey, provider); + }, + async transferNftToForeign( + sender: Signer, + chain_nonce: number, + to: string, + id: NftInfo, + txFees: BigNumber, + mintWith: string, + gasLimit: ethers.BigNumberish | undefined = undefined, + gasPrice + ): Promise { + await approveForMinter(id, sender, txFees, gasPrice); + const method = NFT_METHOD_MAP[id.native.contractType].freeze; + + // Chain is Hedera + if (params.nonce === 0x1d) { + id.native.tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [id.collectionIdent, id.native.tokenId] + ); + id.native.contract = params.erc721_addr; + } + + const tx = await minter + .connect(sender) + .populateTransaction[method]( + id.native.contract, + id.native.tokenId, + chain_nonce, + to, + mintWith, + { + value: EthBN.from(txFees.toFixed(0)), + gasLimit, + gasPrice, + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const txr: TransactionResponse | unknown = await sender + .sendTransaction(tx) + .catch((e) => { + if (params.nonce === 33) { + return e; + } else throw e; + }); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = txr["transactionId"]; + } else if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = txr["returnedHash"] || txr.hash; + } else { + //@ts-ignore checked normal evm + txHash = txr.hash; + } + + await notifyValidator( + //@ts-ignore + txHash + ); + if (params.nonce === 33) { + return await provider.getTransaction(txHash); + } + return txr as any; + }, + async unfreezeWrappedNft( + sender: Signer, + to: string, + id: NftInfo, + txFees: BigNumber, + nonce, + gasLimit = undefined, + gasPrice + ): Promise { + await approveForMinter(id, sender, txFees, gasPrice); + + // Chain is Hedera + if (params.nonce === 0x1d) { + id.native.tokenId = ethers.utils.solidityPack( + ["uint160", "int96"], + [EthBN.from(id.collectionIdent), id.native.tokenId] + ); + id.native.contract = params.erc721_addr; + } + + const txn = await minter + .connect(sender) + .populateTransaction.withdrawNft( + to, + nonce, + id.native.tokenId, + id.native.contract, + { + value: EthBN.from(txFees.toFixed(0)), + gasLimit, + gasPrice, + } + ); + + await txnUnderpricedPolyWorkaround(txn); + const res = await sender.sendTransaction(txn); + console.log(res, "res"); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = res["transactionId"]; + } else if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = res["returnedHash"] || res.hash; + } else { + //@ts-ignore checked normal evm + txHash = res.hash; + } + + await notifyValidator(txHash); + if (params.nonce === 33) { + return await provider.getTransaction(txHash); + } + return res as any; + }, + async estimateValidateTransferNft( + _to: string, + _nftUri: NftInfo, + _mintWith + ): Promise { + const gas = await provider.getGasPrice(); + + return new BigNumber(gas.mul(150_000).toString()); + }, + async estimateContractDep(toChain: any): Promise { + try { + console.log("NEED TO DEPLOY CONTRACT"); + const gas = await provider.getGasPrice(); + const pro = toChain.getProvider(); + const wl = ["0x47Bf0dae6e92e49a3c95e5b0c71422891D5cd4FE"]; + const gk = 123; + const gkx = 42; + const factory = new ethers.ContractFactory( + Minter__factory.abi, + Minter__factory.bytecode + ); + const estimateGas = await pro.estimateGas( + factory.getDeployTransaction(gk, gkx, wl) + ); + const contractFee = gas.mul(estimateGas); + const sum = new BigNumber(contractFee.toString()); + return sum; + } catch (error: any) { + console.log(error.message); + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + } + }, + validateAddress(adr) { + return Promise.resolve(ethers.utils.isAddress(adr)); + }, + isNftWhitelisted(nft) { + return minter.nftWhitelist(nft.native.contract); + }, + }; } diff --git a/src/helpers/web3_erc20.ts b/src/helpers/web3_erc20.ts new file mode 100644 index 000000000..70f78ec2c --- /dev/null +++ b/src/helpers/web3_erc20.ts @@ -0,0 +1,471 @@ +/** + * Web3 Implementation for cross chain traits + * @module + */ +import BigNumber from "bignumber.js"; +import { + BigNumber as EthBN, + ContractTransaction, + ethers, + PopulatedTransaction, + Signer, + VoidSigner, + Wallet, +} from "ethers"; +import { Provider, TransactionResponse } from "@ethersproject/providers"; +import { + Erc1155Minter__factory, + MinterERC20__factory, + UserNftMinter__factory, + PaymentToken__factory, +} from "xpnet-web3-contracts"; +import { + BaseWeb3Helper, + EthNftInfo, + MintArgs, + NFT_METHOD_MAP, + NftInfo, + TransactionStatus, + Web3Helper, + Web3Params, +} from ".."; +import axios from "axios"; + +/** + * Create an object implementing minimal utilities for a web3 chain + * + * @param provider An ethers.js provider object + */ +export async function baseWeb3HelperFactory( + provider: Provider +): Promise { + const w3 = provider; + + return { + async balance(address: string): Promise { + const bal = await w3.getBalance(address); + + // ethers BigNumber is not compatible with our bignumber + return new BigNumber(bal.toString()); + }, + async deployErc721(owner: Signer): Promise { + const factory = new UserNftMinter__factory(owner); + const contract = await factory.deploy(); + + return contract.address; + }, + async mintNftErc1155(owner: Signer, { contract }) { + const erc1155 = Erc1155Minter__factory.connect(contract!, owner); + const tx = await erc1155.mintNft(await owner.getAddress()); + + return tx; + }, + async mintNft( + owner: Signer, + { contract, uri }: MintArgs + ): Promise { + const erc721 = UserNftMinter__factory.connect(contract!, owner); + + const txm = await erc721.mint(uri, { gasLimit: 1000000 }); + return txm; + }, + }; +} + +export type Web3ERC20Params = Web3Params & { + paymentTokenAddress: string; +}; + +export async function web3ERC20HelperFactory( + params: Web3ERC20Params +): Promise { + const txnUnderpricedPolyWorkaround = + params.nonce == 7 + ? async (utx: PopulatedTransaction) => { + const res = await axios + .get( + "https://gpoly.blockscan.com/gasapi.ashx?apikey=key&method=pendingpooltxgweidata" + ) + .catch(async () => { + return await axios.get( + "https://gasstation-mainnet.matic.network/v2" + ); + }); + const { result, fast } = res.data; + const trackerGas = result?.rapidgaspricegwei || fast?.maxFee; + + if (trackerGas) { + const sixtyGwei = ethers.utils.parseUnits( + Math.ceil(trackerGas).toString(), + "gwei" + ); + utx.maxFeePerGas = sixtyGwei; + utx.maxPriorityFeePerGas = sixtyGwei; + } + } + : () => Promise.resolve(); + const w3 = params.provider; + const { minter_addr, provider } = params; + const minter = MinterERC20__factory.connect(minter_addr, provider); + + async function notifyValidator( + fromHash: string, + actionId?: string, + type?: string, + toChain?: number, + txFees?: string, + senderAddress?: string, + targetAddress?: string, + nftUri?: string, + tokenId?: string, + contract?: string + ): Promise { + await params.notifier.notifyWeb3( + params.nonce, + fromHash, + actionId, + type, + toChain, + txFees, + senderAddress, + targetAddress, + nftUri, + tokenId, + contract + ); + } + + async function getTransaction(hash: string) { + let trx; + let fails = 0; + while (!trx && fails < 7) { + trx = await provider.getTransaction(hash); + await new Promise((resolve) => + setTimeout(() => resolve("wait"), 5000 + fails * 2) + ); + fails++; + } + + return trx as TransactionResponse; + } + + async function extractAction(txr: TransactionResponse): Promise { + const receipt = await txr.wait(); + const log = receipt.logs.find((log) => log.address === minter.address); + if (log === undefined) { + throw Error("Couldn't extract action_id"); + } + + const evdat = minter.interface.parseLog(log); + const action_id: string = evdat.args[0].toString(); + return action_id; + } + + const isApprovedForMinter = async ( + id: NftInfo, + signer: Signer, + _txFees: BigNumber + ) => { + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + signer + ); + return await NFT_METHOD_MAP[id.native.contractType].approved( + erc as any, + await signer.getAddress(), + minter_addr, + id.native.tokenId, + params.nonce === 0x1d ? {} : undefined + ); + }; + + const approveForMinter = async ( + id: NftInfo, + sender: Signer, + txFees: BigNumber, + gasPrice: ethers.BigNumberish | undefined + ) => { + const isApproved = await isApprovedForMinter(id, sender, txFees); + if (isApproved) { + return undefined; + } + const erc = NFT_METHOD_MAP[id.native.contractType].umt.connect( + id.native.contract, + sender + ); + + const receipt = await NFT_METHOD_MAP[id.native.contractType].approve( + erc as any, + minter_addr, + id.native.tokenId, + txnUnderpricedPolyWorkaround, + params.nonce === 0x1d ? {} : undefined, + gasPrice + ); + await receipt.wait(); + + const erc20 = PaymentToken__factory.connect( + params.paymentTokenAddress, + sender + ); + const approval = await erc20.approve( + minter_addr, + EthBN.from(txFees.toString()) + ); + + return approval.hash; + }; + + const base = await baseWeb3HelperFactory(params.provider); + + return { + ...base, + XpNft: params.erc721_addr, + XpNft1155: params.erc1155_addr, + getParams: () => params, + approveForMinter, + getProvider: () => provider, + async estimateValidateUnfreezeNft(_to, _id, _mW) { + const gas = await provider.getGasPrice(); + return new BigNumber(gas.mul(150_000).toString()); + }, + getFeeMargin() { + return params.feeMargin; + }, + isApprovedForMinter, + preTransfer: (s, id, _fee, args) => + approveForMinter(id, s, _fee, args?.gasPrice), + extractAction, + async isContractAddress(address) { + const code = await provider.getCode(address); + return code !== "0x"; + }, + getNonce: () => params.nonce, + async preTransferRawTxn(id, address, _value) { + const isApproved = await isApprovedForMinter( + id, + new VoidSigner(address, provider), + _value! + ); + + if (isApproved) { + return undefined; + } + + const erc = UserNftMinter__factory.connect( + id.native.contract, + new VoidSigner(address, provider) + ); + + const approvetxn = await erc.populateTransaction.approve( + minter_addr, + id.native.tokenId + ); + + return approvetxn; + }, + + async extractTxnStatus(txn) { + const status = (await (await provider.getTransaction(txn)).wait()).status; + if (status === undefined) { + return TransactionStatus.PENDING; + } + if (status === 1) { + return TransactionStatus.SUCCESS; + } else if (status === 0) { + return TransactionStatus.FAILURE; + } + return TransactionStatus.UNKNOWN; + }, + async getTokenURI(contract, tokenId) { + if (ethers.utils.isAddress(contract) && tokenId) { + const erc721 = UserNftMinter__factory.connect(contract!, provider); + return await erc721.tokenURI(tokenId).catch(() => ""); + } + return ""; + }, + async unfreezeWrappedNftBatch(signer, chainNonce, to, nfts, txFees) { + const tx = await minter + .connect(signer) + .populateTransaction.withdrawNftBatch( + to, + chainNonce, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + nfts[0].native.contract, + EthBN.from(txFees.toString()) + ); + await txnUnderpricedPolyWorkaround(tx); + const res = await signer.sendTransaction(tx); + + // await notifyValidator( + // res.hash, + // await extractAction(res), + // "Unfreeze", + // chainNonce.toString(), + // txFees.toString(), + // await signer.getAddress(), + // to, + // res.data + // ); + await notifyValidator(res.hash); + + return res; + }, + async transferNftBatchToForeign( + signer, + chainNonce, + to, + nfts, + mintWith, + txFees + ) { + const tx = await minter + .connect(signer) + .populateTransaction.freezeErc1155Batch( + nfts[0].native.contract, + nfts.map((nft) => nft.native.tokenId), + new Array(nfts.length).fill(1), + chainNonce, + to, + mintWith, + EthBN.from(txFees.toString()) + ); + await txnUnderpricedPolyWorkaround(tx); + + const res = await signer.sendTransaction(tx); + + await notifyValidator(res.hash); + + return res; + }, + async estimateValidateTransferNftBatch(_to, nfts, _mintWith) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + async estimateValidateUnfreezeNftBatch(_to, nfts) { + const gasPrice = await w3.getGasPrice(); + const gas = 40_000 + 60_000 * nfts.length; + return new BigNumber(gasPrice.mul(gas).toString()); + }, + createWallet(privateKey: string): Wallet { + return new Wallet(privateKey, provider); + }, + async transferNftToForeign( + sender: Signer, + chain_nonce: number, + to: string, + id: NftInfo, + txFees: BigNumber, + mintWith: string, + gasLimit: ethers.BigNumberish | undefined = undefined, + gasPrice + ): Promise { + await approveForMinter(id, sender, txFees, gasPrice); + const method = NFT_METHOD_MAP[id.native.contractType].freeze; + + const tx = await minter + .connect(sender) + .populateTransaction[method]( + id.native.contract, + id.native.tokenId, + chain_nonce, + to, + mintWith, + EthBN.from(txFees.toString()), + { + gasLimit, + } + ); + await txnUnderpricedPolyWorkaround(tx); + + const txr: TransactionResponse | unknown = await sender + .sendTransaction(tx) + .catch((e) => { + if (params.nonce === 33) { + return e; + } else throw e; + }); + let txHash: string; + if (params.nonce === 0x1d) { + //@ts-ignore checked hedera + txHash = txr["transactionId"]; + } + if (params.nonce === 33) { + //@ts-ignore checked abeychain + txHash = txr["returnedHash"] || txr.hash; + } else { + //@ts-ignore checked normal evm + txHash = txr.hash; + } + + await notifyValidator( + //@ts-ignore + txHash, + await extractAction(await getTransaction(txHash)), + "Transfer", + chain_nonce, + txFees.toString(), + await sender.getAddress(), + to, + id.uri, + id.native.tokenId, + id.native.contract + ); + return params.nonce === 33 + ? await provider.getTransaction(txHash) + : (txr as TransactionResponse); + }, + async unfreezeWrappedNft( + sender: Signer, + to: string, + id: NftInfo, + txFees: BigNumber, + nonce + ): Promise { + const txn = await minter + .connect(sender) + .populateTransaction.withdrawNft( + to, + nonce, + id.native.tokenId, + id.native.contract, + EthBN.from(txFees.toString()) + ); + + await txnUnderpricedPolyWorkaround(txn); + const res = await sender.sendTransaction(txn); + + await notifyValidator( + res.hash, + await extractAction(res), + "Unfreeze", + Number(nonce), + txFees.toString(), + await sender.getAddress(), + to, + id.uri, + id.native.tokenId, + id.native.contract + ); + + return res; + }, + async estimateValidateTransferNft( + _to: string, + _nftUri: NftInfo, + _mintWith + ): Promise { + const gas = await provider.getGasPrice(); + + return new BigNumber(gas.mul(150_000).toString()); + }, + validateAddress(adr) { + return Promise.resolve(ethers.utils.isAddress(adr)); + }, + isNftWhitelisted(nft) { + return minter.nftWhitelist(nft.native.contract); + }, + }; +} diff --git a/src/index.ts b/src/index.ts index ff67f35ee..493bce929 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,10 @@ export * from "./helpers/chain"; -export * from "./helpers/polkadot"; export * from "./helpers/elrond"; export * from "./helpers/web3"; +export * from "./helpers/tron"; export * from "./socket"; +export * from "./emitter"; +export * from "./factory"; +export * from "./consts"; +export * from "./config"; +export { ChainNonce } from "./type-utils"; diff --git a/src/notifier/index.ts b/src/notifier/index.ts new file mode 100644 index 000000000..eb4628945 --- /dev/null +++ b/src/notifier/index.ts @@ -0,0 +1,91 @@ +import axios from "axios"; + +export type EvNotifier = ReturnType; + +export function evNotifier(url: string) { + const api = axios.create({ + baseURL: url, + }); + + return { + async notifyWeb3( + fromChain: number, + fromHash: string, + actionId?: string, + type?: string, + toChain?: number, + txFees?: string, + senderAddress?: string, + targetAddress?: string, + nftUri?: string, + tokenId?: string, + contract?: string + ) { + await api.post("/tx/web3", { + chain_nonce: fromChain, + tx_hash: fromHash, + actionId, + type, + toChain, + txFees, + senderAddress, + targetAddress, + nftUri, + tokenId, + contract, + }); + }, + async notifyTron(txHash: string) { + await api.post("/tx/tron", { + tx_hash: txHash, + }); + }, + async notifyElrond( + txHash: string, + sender: string, + uris: string[], + action_id: string | undefined + ) { + await api.post("/tx/elrond", { + tx_hash: txHash, + sender, + uris, + action_id, + }); + }, + async notifyTezos(txHash: string) { + await api.post("/tx/tezos", { + tx_hash: txHash, + }); + }, + async notifyAlgorand(txHash: string) { + await api.post("/tx/algorand", { + tx_hash: txHash, + }); + }, + async notifySecret(txHash: string, vk: string) { + await api.post("/tx/scrt", { tx_hash: txHash, vk: vk }); + }, + async notifySolana(txHash: string) { + await api.post("/tx/solana", { tx_hash: txHash }); + }, + async notifyNear(txHash: string) { + await api.post("/tx/near", { tx_hash: txHash }); + }, + async notifyDfinity(actionId: string) { + await api.post("/tx/dfinity", { action_id: actionId }); + }, + async notifyTon(txHash: string) { + await api.post("/tx/ton", { tx_hash: txHash }); + }, + async notifyAptos(txHash: string) { + await api.post("/tx/aptos", { tx_hash: txHash }); + }, + async notifyEVM(nonce: number, address: string) { + await api.post("/whitelist", { + contract: address, + chain_nonce: nonce, + }); + }, + }; +} diff --git a/src/scripts/deploy_tron.ts b/src/scripts/deploy_tron.ts new file mode 100644 index 000000000..8169bb09a --- /dev/null +++ b/src/scripts/deploy_tron.ts @@ -0,0 +1,33 @@ +import { baseTronHelperFactory } from "../helpers/tron"; +//@ts-expect-error no typings, cope +import TronWeb from "tronweb"; +import { config } from "dotenv"; +config(); + +(async () => { + // Testnet + // const api = "https://api.shasta.trongrid.io"; + // const signer = process.env.TRON_SK!; + // const xpnftWrappedUri = "https://bridge-wnftapi.herokuapp.com/w/"; + // const xpnft1155WrappedUri = "https://bridge-wnftapi.herokuapp.com/w/{id}"; + // const frostGroupKey = process.env.FROST_GROUP_KEY!; + + // Mainnet + const api = "https://api.trongrid.io"; + const signer = process.env.TRON_SK!; + const xpnftWrappedUri = "https://wnfts.xp.network/w/"; + const xpnft1155WrappedUri = "https://wnfts.xp.network/w/{id}"; + const frostGroupKey = process.env.FROST_GROUP_KEY!; + + const prov = new TronWeb({ fullHost: api }); + const tron = await baseTronHelperFactory(prov); + + const contracts = await tron.deployMinter( + signer, + frostGroupKey, + xpnftWrappedUri, + xpnft1155WrappedUri + ); + + console.log(contracts); +})().catch((e) => console.error(e)); diff --git a/src/socket.ts b/src/socket.ts index f1be02801..c5f56deb0 100644 --- a/src/socket.ts +++ b/src/socket.ts @@ -1,115 +1,215 @@ +import axios from "axios"; import { io, ManagerOptions, SocketOptions } from "socket.io-client"; - -type ChainAwaiter = { - [action_id: string]: { - resolve?: (hash: string) => void; - event_res?: string; - } | undefined; +import { ClaimNftInfo } from "./helpers/algorand"; + +type ChainAwaiter = { + [action_id: string]: + | { + resolve?: (data: T) => void; + event_res?: T; + } + | undefined; }; -type TxResInnerBuf = { - [chain: number]: ChainAwaiter; -} +type SocketResInnerBuf = { + [chain: number]: ChainAwaiter; +}; -type TxResBuf = { - getResolver(chain_id: number, action_id: string): ((hash: string) => void) | undefined; - setResolver(chain_id: number, action_id: string, resolver: (hash: string) => void): void; - getEventRes(chain_id: number, action_id: string): string | undefined; - setEventRes(chain_id: number, action_id: string, res: string): void; - unsetAction(chain_id: number, action_id: string): void; +type SocketResBuf = { + getResolver( + chain_id: number, + action_id: string + ): ((data: T) => void) | undefined; + setResolver( + chain_id: number, + action_id: string, + resolver: (data: T) => void + ): void; + getEventRes(chain_id: number, action_id: string): T | undefined; + setEventRes(chain_id: number, action_id: string, res: T): void; + unsetAction(chain_id: number, action_id: string): void; }; /** * Tracker for cross chain transaction */ export type TxnSocketHelper = { - /** - * - * @param chain Nonce of the target chain - * @param action_id Identifier for tracking a cross chain transaction - * @returns transaction hash on the foreign chain - */ - waitTxHash(chain: number, action_id: string): Promise; + /** + * + * @param chain Nonce of the target chain + * @param action_id Identifier for tracking a cross chain transaction + * @returns transaction hash on the foreign chain + */ + waitTxHash(chain: number, action_id: string): Promise; +}; + +export type AlgorandSocketHelper = { + waitAlgorandNft( + sourceChain: number, + receiver: string, + action_id: string + ): Promise; + claimNfts(receiver: string): Promise; + cleanNfts(owner: string): Promise; +}; + +function pairAction(sourceChain: number, action_id: string): number { + const numId = parseInt(action_id); + return numId >= sourceChain + ? numId * numId + sourceChain + numId + : numId + sourceChain * sourceChain; +} + +function socketResBuf(): SocketResBuf { + const inner: SocketResInnerBuf = {}; + + const requireChain = (chain_id: number) => { + if (inner[chain_id] === undefined) { + inner[chain_id] = {}; + } + }; + + return { + getResolver( + chain_id: number, + action_id: string + ): ((data: T) => void) | undefined { + requireChain(chain_id); + + return inner[chain_id][action_id]?.resolve; + }, + setResolver( + chain_id: number, + action_id: string, + resolver: (data: T) => void + ): void { + requireChain(chain_id); + + inner[chain_id][action_id] = { resolve: resolver }; + }, + getEventRes(chain_id: number, action_id: string): T | undefined { + requireChain(chain_id); + + return inner[chain_id][action_id]?.event_res; + }, + setEventRes(chain_id: number, action_id: string, res: T): void { + requireChain(chain_id); + + inner[chain_id][action_id] = { event_res: res }; + }, + unsetAction(chain_id: number, action_id: string): void { + requireChain(chain_id); + + inner[chain_id][action_id] = undefined; + }, + }; +} + +function add_event( + buf: SocketResBuf, + chain: number, + id: string, + data: T +) { + const resolve = buf.getResolver(chain, id); + if (resolve === undefined) { + buf.setEventRes(chain, id, data); + return; + } + resolve(data); } -function txResBuf(): TxResBuf { - const inner: TxResInnerBuf = {}; - - const requireChain = (chain_id: number) => { - if (inner[chain_id] === undefined) { - inner[chain_id] = {}; - } - } - - return { - getResolver(chain_id: number, action_id: string): ((hash: string) => void) | undefined { - requireChain(chain_id); - - return inner[chain_id][action_id]?.resolve; - }, - setResolver(chain_id: number, action_id: string, resolver: (hash: string) => void): void { - requireChain(chain_id); - - inner[chain_id][action_id] = { resolve: resolver }; - }, - getEventRes(chain_id: number, action_id: string): string | undefined { - requireChain(chain_id); - - return inner[chain_id][action_id]?.event_res; - }, - setEventRes(chain_id: number, action_id: string, res: string): void { - requireChain(chain_id); - - inner[chain_id][action_id] = { event_res: res }; - }, - unsetAction(chain_id: number, action_id: string): void { - requireChain(chain_id); - - inner[chain_id][action_id] = undefined; - } - } +async function waitSocketData( + buf: SocketResBuf, + chain: number, + action_id: string +): Promise { + const data = buf.getEventRes(chain, action_id); + if (data !== undefined) { + buf.unsetAction(chain, action_id); + return data; + } + + const dataP: Promise = new Promise((r) => { + buf.setResolver(chain, action_id, r); + }); + + return await dataP; } +type DbClaimInfo = { + receiver: string; + app_id: string; + nft_id: string; + action_id: string; + inserted_at: Date; +}; + /** - * Create a [[TxnSocketHelper]] - * + * Create a [[SocketHelper]] + * * @param uri URI of the Migration-Validator socket api * @param options socket.io options */ -export function txnSocketHelper(uri: string, options?: Partial): TxnSocketHelper { - const socket = io(uri, options); - const buf: TxResBuf = txResBuf(); - - function add_event(chain: number, id: string, hash: string) { - const resolve = buf.getResolver(chain, id); - if (resolve === undefined) { - buf.setEventRes(chain, id, hash); - return; - } - resolve(hash); +export function socketHelper( + uri: string, + options?: Partial +): TxnSocketHelper & AlgorandSocketHelper { + const socket = io(uri, options); + const txbuf: SocketResBuf = socketResBuf(); + const algoBuf: SocketResBuf = socketResBuf(); + const dbApi = axios.create({ + baseURL: uri, + }); + + socket.on( + "tx_executed_event", + (chain: number, action_id: string, hash: string) => { + add_event(txbuf, chain, action_id, hash); } - - socket.on( - "tx_executed_event", - (chain: number, action_id: string, hash: string) => { - add_event(chain, action_id, hash); - } - ); - - - return { - async waitTxHash(chain: number, action_id: string): Promise { - const hash = buf.getEventRes(chain, action_id); - if (hash !== undefined) { - buf.unsetAction(chain, action_id); - return hash; - } - - const hashP: Promise = new Promise(r => { - buf.setResolver(chain, action_id, r); - }); - - return await hashP; - } - } + ); + + socket.on( + "algorand_minted_event", + (_: number, action_id: string, app_id: number, nft_id: number) => + add_event(algoBuf, 15, action_id, { + appId: app_id, + nftId: nft_id, + }) + ); + + return { + async waitTxHash(chain: number, action_id: string): Promise { + return await waitSocketData(txbuf, chain, action_id); + }, + async waitAlgorandNft( + sourceChain: number, + receiver: string, + action_id: string + ): Promise { + // Validator sends a an action paired with chain id + // this is implementation dependent on validator + const paired = pairAction(sourceChain, action_id).toString(); + const dbData = await dbApi.get>( + `/algorand_event/${receiver}/${paired}` + ); + if (dbData.data.app_id) { + return { + appId: parseInt(dbData.data.app_id!), + nftId: parseInt(dbData.data.nft_id!), + }; + } + + return await waitSocketData(algoBuf, 15, paired); + }, + async claimNfts(receiver: string): Promise { + const dbData = await dbApi.get<{ result: DbClaimInfo[] }>( + `/algorand_event/${receiver}` + ); + return dbData.data.result; + }, + async cleanNfts(owner: string): Promise { + await dbApi.delete(`/algorand_event/${owner}`); + }, + }; } diff --git a/src/type-utils.ts b/src/type-utils.ts new file mode 100644 index 000000000..df8dad30f --- /dev/null +++ b/src/type-utils.ts @@ -0,0 +1,41 @@ +import { MetaMap, TransferNftForeign } from "."; + +type TransferNftChain = TransferNftForeign< + Signer, + RawNft, + Resp +>; + +export type ChainNonce = keyof MetaMap; + +export type InferChainParam = MetaMap[K][1]; +export type InferChainH = MetaMap[K][0]; +export type InferSigner = K extends TransferNftChain< + infer S, + unknown, + unknown +> + ? S + : never; + +export type InferNativeNft = K extends TransferNftChain< + any, + infer RawNft, + any +> + ? RawNft + : never; + +export type ParamMap = { + set(k: T, v: InferChainParam | undefined): void; + get(k: T): InferChainParam | undefined; +}; + +export type HelperMap = Map< + K, + InferChainH | undefined +>; + +export type Mutable = { + -readonly [Key in keyof Type]: Type[Key]; +}; diff --git a/tsconfig.json b/tsconfig.json index a14ba0841..e40fc5c03 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,25 @@ { "compilerOptions": { - "incremental": true, - "target": "es2017", + "incremental": false, + "target": "ES2021", "outDir": "./dist", + //"outDir": "../bridge-interface/node_modules/xp.network/dist", "rootDir": "src", "moduleResolution": "node", "module": "commonjs", "declaration": true, + "declarationMap": true, "inlineSourceMap": true, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, "resolveJsonModule": true /* Include modules imported with .json extension. */, + "skipLibCheck": true, "strict": true /* Enable all strict type-checking options. */, /* Strict Type-Checking Options */ - // "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, // "strictNullChecks": true /* Enable strict null checks. */, - // "strictFunctionTypes": true /* Enable strict checking of function types. */, + "strictFunctionTypes": true /* Enable strict checking of function types. */, // "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, // "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, // "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, @@ -37,7 +40,7 @@ // "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, // "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */, - "lib": ["es2019", "dom"], // elrdjs depends on dom? + "lib": ["ES2021", "dom"], // elrdjs depends on dom? "types": ["node"], "typeRoots": ["node_modules/@types", "src/types"] }, diff --git a/yarn.lock b/yarn.lock index 02cd673f9..bb1a47c4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,27 +9,32 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.10.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== +"@babel/code-frame@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.14.5" + "@babel/highlight" "^7.18.6" -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.20.15": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3" + integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ== + "@babel/runtime@7.11.2": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -37,31 +42,108 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.14.8": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" - integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.15.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" - integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== - dependencies: - regenerator-runtime "^0.13.4" +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@bundlr-network/client@^0.8.8": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@bundlr-network/client/-/client-0.8.9.tgz#58e969a5d80f8d25d212d46bb7a060730a3c1736" + integrity sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.2" + "@solana/web3.js" "^1.36.0" + "@supercharge/promise-pool" "^2.1.0" + algosdk "^1.13.1" + arbundles "^0.6.21" + arweave "^1.11.4" + async-retry "^1.3.3" + axios "^0.25.0" + base64url "^3.0.1" + bignumber.js "^9.0.1" + bs58 "^4.0.1" + commander "^8.2.0" + csv "^6.0.5" + ethers "^5.5.1" + inquirer "^8.2.0" + js-sha256 "^0.9.0" + mime-types "^2.1.34" + near-api-js "^0.44.2" + near-seed-phrase "^0.2.0" + +"@cosmjs/encoding@0.27.1": + version "0.27.1" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.27.1.tgz#3cd5bc0af743485eb2578cdb08cfa84c86d610e1" + integrity sha512-rayLsA0ojHeniaRfWWcqSsrE/T1rl1gl0OXVNtXlPwLJifKBeLEefGbOUiAQaT0wgJ8VNGBazVtAZBpJidfDhw== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + +"@cosmjs/math@0.27.1": + version "0.27.1" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.27.1.tgz#be78857b008ffc6b1ed6fecaa1c4cd5bc38c07d7" + integrity sha512-cHWVjmfIjtRc7f80n7x+J5k8pe+vTVTQ0lA82tIxUgqUvgS6rogPP/TmGtTiZ4+NxWxd11DUISY6gVpr18/VNQ== + dependencies: + bn.js "^5.2.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dfinity/agent@^0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@dfinity/agent/-/agent-0.11.3.tgz#3363b1dbaa10a6e5cfe25e269316e2416fd3d11d" + integrity sha512-pqiogLey6S83SG5BS93hBCtXfGRW6tkxa8Y0c9HwxOP/wRoVEuKHdTcOn7rL/HN4mDTwxkdqK4EC1Kv24S1q4Q== + dependencies: + base64-arraybuffer "^0.2.0" + bignumber.js "^9.0.0" + borc "^2.1.1" + js-sha256 "0.9.0" + simple-cbor "^0.4.1" + +"@dfinity/candid@^0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@dfinity/candid/-/candid-0.11.3.tgz#aed66124751545522acf9bde7cdc22b5d9ce31df" + integrity sha512-xX7xNj2lLt7SIlvy0sqNp4fpcTD/xnwEu9APj0tnIF64cnsxIiS12T1Z8jl9g80jCQ1CbRPQf4cfsOfS3Cd2OA== + +"@dfinity/identity@^0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@dfinity/identity/-/identity-0.12.2.tgz#297a15cf73ffe29c9334d32946738e8b0a53837e" + integrity sha512-JebcS29x3nsUK+qdF0FNSnx4IQ1xYiFB9mHpbGT3/MFe52s40DxL4CvsaZ8zAjDnusQnTJLzqLWGM7oo0QqwyQ== + dependencies: + "@peculiar/webcrypto" "^1.4.0" + borc "^2.1.1" + js-sha256 "^0.9.0" + secp256k1 "^4.0.2" + ts-node "^10.8.2" + tweetnacl "^1.0.1" + vitest "^0.18.0" + +"@dfinity/nns@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@dfinity/nns/-/nns-0.5.0.tgz#f34244c9b79597edd78bfb8793cca7ac9771c38d" + integrity sha512-zFZswSTRx5VsyuC6cufmHibTXLbIfzhvzitB8X4i6tpGLT/0K7gMpKR6gYsDyG/Gq+aF2Z6CxEfE/RJIGQGbSw== + dependencies: + "@dfinity/agent" "^0.11.3" + "@dfinity/candid" "^0.11.3" + "@dfinity/principal" "^0.11.3" + crc "^4.1.1" + crc-32 "^1.2.2" + google-protobuf "^3.20.1" + js-sha256 "^0.9.0" + randombytes "^2.1.0" -"@bitauth/libauth@^1.17.1": - version "1.18.1" - resolved "https://registry.yarnpkg.com/@bitauth/libauth/-/libauth-1.18.1.tgz#b1c632ed85f73c16a0ff89d81e8a92809fa15108" - integrity sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg== +"@dfinity/principal@^0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@dfinity/principal/-/principal-0.11.3.tgz#2130a7673bb8c2d404bc9842136547a91cb3edd2" + integrity sha512-+AJGDJ+RsveybSdxuTQFr2DPNZFpPfXnyixAOFWWdElVniSwnO/SwqQChR0AWvJdy/fKqoAXK+ZzyLG0uqSetA== "@elrondnetwork/bls-wasm@0.3.3": version "0.3.3" @@ -71,64 +153,40 @@ assert "^2.0.0" perf_hooks "0.0.1" -"@elrondnetwork/erdjs@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@elrondnetwork/erdjs/-/erdjs-6.2.0.tgz#75ba6ce50fd1f6e03737bb7b86db10ce67b46e34" - integrity sha512-LDKezky9A//K+BZyLCiWrSx7bkmjUDbBbjAxrrIsG0cRN7JuAeUxp4dFBxyzg5vvSfJBa/k7xe4BMfqxYyxIsg== +"@elrondnetwork/erdjs@9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@elrondnetwork/erdjs/-/erdjs-9.0.3.tgz#3909874096778d75e622d9f3a661ff690f54ec5d" + integrity sha512-xOBzlFXkx2avMFTrZrgKoSSJbBUlZnSobpDaMzs4hqvUYr/xAN2y+nbMFJqaLcfKxf5ALGolnbqhprHLNfWpEQ== dependencies: "@babel/runtime" "7.11.2" "@elrondnetwork/bls-wasm" "0.3.3" - "@elrondnetwork/hw-app-elrond" "0.2.0" - "@ledgerhq/hw-transport-u2f" "5.28.0" - "@ledgerhq/hw-transport-webusb" "5.28.0" - "@walletconnect/client" "1.4.1" + "@elrondnetwork/hw-app-elrond" "0.3.2" + "@ledgerhq/hw-transport-u2f" "^5.36.0-deprecated" + "@ledgerhq/hw-transport-webhid" "^6.11.2" + "@ledgerhq/hw-transport-webusb" "6.11.2" + "@walletconnect/client" "1.6.5" abort-controller "3.0.0" - axios "0.21.1" - bech32 "1.1.4" - bignumber.js "9.0.1" - bip39 "3.0.2" - blake2b "2.1.3" - ed25519-hd-key "1.1.2" - json-bigint "1.0.0" - json-duplicate-key-handle "1.0.0" - keccak "3.0.1" - platform "1.3.6" - protobufjs "6.10.2" - scryptsy "2.1.0" - tweetnacl "1.0.3" - uuid "8.3.2" - -"@elrondnetwork/erdjs@^6.5.0": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@elrondnetwork/erdjs/-/erdjs-6.6.2.tgz#25966b494acb80038e3506e8cb2d590a57b2f198" - integrity sha512-NZQ6yVGyXteXSVO+XhJYIxmFg34jmNuSDgYGQfAg6/A1Pio3lyuvAgCUe1a+mMRUr82Il3mMmO1uAaLUXSpjzw== - dependencies: - "@babel/runtime" "7.11.2" - "@elrondnetwork/bls-wasm" "0.3.3" - "@elrondnetwork/hw-app-elrond" "0.3.0" - "@ledgerhq/hw-transport-u2f" "5.28.0" - "@ledgerhq/hw-transport-webusb" "5.28.0" - "@walletconnect/client" "1.4.1" - abort-controller "3.0.0" - axios "0.21.1" + axios "0.24.0" bech32 "1.1.4" bignumber.js "9.0.1" bip39 "3.0.2" blake2b "2.1.3" + buffer "6.0.3" ed25519-hd-key "1.1.2" json-bigint "1.0.0" json-duplicate-key-handle "1.0.0" keccak "^3.0.1" platform "1.3.6" protobufjs "6.10.2" + qs "6.10.1" scryptsy "2.1.0" tweetnacl "1.0.3" uuid "8.3.2" -"@elrondnetwork/hw-app-elrond@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@elrondnetwork/hw-app-elrond/-/hw-app-elrond-0.2.0.tgz#9eb3157204798eb8c1c4cf3fc74283aa58854cc8" - integrity sha512-gL4fjboaMzl7QqP9gDkxiLSV2o8YUTt6iyukiSEOY+b6zDt9Q4XwJkT9FjHdZs9m02llNlBUsCfpc59+TEXpxg== +"@elrondnetwork/hw-app-elrond@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@elrondnetwork/hw-app-elrond/-/hw-app-elrond-0.3.2.tgz#3c01cda58a58a63e7e3caf1b36ac8d5909550fb2" + integrity sha512-5TGnKuFQC6g4J9ipqEH5T71TEgGPDyU68lxdiF60qwQO5W0GaYvHKJiKe9rQdra5bCM04/4klMZDAg3BKqRoTw== dependencies: "@ledgerhq/hw-transport" "^5.19.1" "@ledgerhq/hw-transport-node-hid" "^5.19.1" @@ -136,21 +194,20 @@ flow-copy-source "^2.0.9" flow-typed "^3.2.1" -"@elrondnetwork/hw-app-elrond@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@elrondnetwork/hw-app-elrond/-/hw-app-elrond-0.3.0.tgz#21b082aaa06293f54e5b1b8b87ed4457ff9bde00" - integrity sha512-amDVVV4demxQdcvL8xEZNrPDDXve3d1sO3/1Tk5UglG2S2RTW3nnmC2UccKYUROEaQaH6YAyZwYhzyTKQilz4g== - dependencies: - "@ledgerhq/hw-transport" "^5.19.1" - "@ledgerhq/hw-transport-node-hid" "^5.19.1" - bip32-path "^0.4.2" - flow-copy-source "^2.0.9" - flow-typed "^3.2.1" +"@esbuild/android-arm@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" + integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@esbuild/linux-loong64@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" + integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -162,425 +219,845 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethersproject/abi@5.4.0", "@ethersproject/abi@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" - integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.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== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - -"@ethersproject/abstract-provider@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" - integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - -"@ethersproject/abstract-signer@5.4.0", "@ethersproject/abstract-signer@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" - integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/abstract-signer@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" - integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/address@5.4.0", "@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== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^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.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== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/bignumber@5.4.0", "@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== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - bn.js "^4.11.9" +"@ethereumjs/common@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" + integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.1" -"@ethersproject/bignumber@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d" - integrity sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg== +"@ethereumjs/common@^2.5.0": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/tx@3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" + integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethereumjs/common" "^2.5.0" + ethereumjs-util "^7.1.2" + +"@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/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + 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/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + 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/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + 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/address@5.7.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + 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/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.5.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.5.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.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.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.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/bytes@5.4.0", "@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/constants@5.4.0", "@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/contracts@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" - integrity sha512-hkO3L3IhS1Z3ZtHtaAG/T87nQ7KiPV+/qnvutag35I0IkiQ8G3ZpCQ9NNOpSCzn4pWSW4CfzmtE02FcqnLI+hw== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - -"@ethersproject/contracts@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470" - integrity sha512-m+z2ZgPy4pyR15Je//dUaymRUZq5MtDajF6GwFbGAVmKz/RF+DNIPwF0k5qEcL3wPGVqUjFg2/krlCRVTU4T5w== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - -"@ethersproject/hash@5.4.0", "@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== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.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== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.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== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@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.7.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.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/hash@5.7.0", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + 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/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.4.0", "@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== +"@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.4.0" - js-sha3 "0.5.7" - -"@ethersproject/logger@5.4.0", "@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/bytes" "^5.5.0" + js-sha3 "0.8.0" -"@ethersproject/networks@5.4.1", "@ethersproject/networks@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" - integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.4.2": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" - integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.7.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== +"@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/bytes" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" -"@ethersproject/properties@5.4.0", "@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== +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" -"@ethersproject/providers@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.1.tgz#654267b563b833046b9c9647647cfc8267cb93b4" - integrity sha512-p06eiFKz8nu/5Ju0kIX024gzEQIgE5pvvGrBCngpyVjpuLtUIWT3097Agw4mTn9/dEA0FMcfByzFqacBMSgCVg== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.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.7.0", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.4.4": - version "5.4.4" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.4.tgz#6729120317942fc0ab0ecdb35e944ec6bbedb795" - integrity sha512-mQevyXj2X2D3l8p/JGDYFZbODhZjW6On15DnCK4Xc9y6b+P0vqorQC/j46omWSm4cyo7BQ/rgfhXNYmvAfyZoQ== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - bech32 "1.1.4" - ws "7.4.6" +"@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.5.0" + "@ethersproject/logger" "^5.5.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== +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.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== +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.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== +"@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.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.5.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@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== +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@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/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/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.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/strings@5.7.0", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + 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/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.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/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/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + 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/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" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@grpc/grpc-js@^1.5.3": + version "1.8.9" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.9.tgz#84e9167dc80b0c3a98608e14b839458bf0df684d" + integrity sha512-xzsl2HamhovnZddS/2pMF4Q+FgwINaBvxoFGQ+G54Lo7Xsge36VvfDO/TDkL7FofmrRK/X5weRvwlJh7rKwN4w== + dependencies: + "@grpc/proto-loader" "^0.7.0" + "@types/node" ">=12.12.47" + +"@grpc/grpc-js@^1.7.3": + version "1.8.12" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.12.tgz#bc0120859e8b153db764b473cc019ddf6bb2b414" + integrity sha512-MbUMvpVvakeKhdYux6gbSIPJaFMLNSY8jw4PqLI+FFztGrQRrYYAnHlR94+ncBQQewkpXQaW449m3tpH/B/ZnQ== + dependencies: + "@grpc/proto-loader" "^0.7.0" + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.7.0": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.5.tgz#ee9e7488fa585dc6b0f7fe88cd39723a3e64c906" + integrity sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^7.0.0" + yargs "^16.2.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@hashgraph/cryptography@^1.1.0-beta.5", "@hashgraph/cryptography@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@hashgraph/cryptography/-/cryptography-1.4.3.tgz#691d539e83e2a1d5d603701f6fd3b6f62ef21a5c" + integrity sha512-txU2SVz8mBJ5aHqkrIpmaerJSu0F/S9T/0eXpYAIC2USy/8oTisp54gKVDTETFdnCrq0tNgCJmWt2N8QHMMbcw== + dependencies: + bignumber.js "^9.1.1" + crypto-js "^4.1.1" + elliptic "^6.5.4" + js-base64 "^3.7.4" + tweetnacl "^1.0.3" + utf8 "^3.0.0" + +"@hashgraph/hethers@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@hashgraph/hethers/-/hethers-1.1.2.tgz#f665b0068b9ec5423181ce6cc2f07db096174732" + integrity sha512-DezQCwm86oQCIXfDwJI6G+/RI0YPy9a/Ho/z3CRUSY9/1gBB0ZFRSK9HUovlrj30eyNtWVeIrHsYE+ZerQI5rQ== + dependencies: + "@ethersproject/solidity" "5.5.0" + "@hethers/abstract-provider" "1.1.1" + "@hethers/abstract-signer" "1.1.2" + "@hethers/address" "1.1.0" + "@hethers/constants" "1.1.0" + "@hethers/contracts" "1.1.1" + "@hethers/hdnode" "1.1.1" + "@hethers/json-wallets" "1.1.1" + "@hethers/logger" "1.1.0" + "@hethers/networks" "1.1.0" + "@hethers/providers" "1.1.1" + "@hethers/signing-key" "1.1.0" + "@hethers/transactions" "1.1.1" + "@hethers/units" "1.1.0" + "@hethers/wallet" "1.1.1" + +"@hashgraph/proto@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@hashgraph/proto/-/proto-2.1.5.tgz#665202dc2c0fe099a5a07018bc82a409cb0933be" + integrity sha512-7iKO98T3iS+V+Ddy3Ew7+u8nzFT8MjRs6HczPE2scCjwKRhsodtYfGyOxVji+HN6WDqZmylr1VJwhNy5de/CRQ== + dependencies: + long "^4.0.0" + protobufjs "^6.11.2" + +"@hashgraph/proto@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@hashgraph/proto/-/proto-2.12.0.tgz#9801251f33ea40c8a25fe47ba754340863dd4b3a" + integrity sha512-IIN6K3b2X8ih7V14IDH8rsVJ1DE9ud25FfKUpr+lDNnQdBfdZdG2AGlHRhc9iDAz4vCHoHc6F3Ao6yYKMceeTg== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" + long "^4.0.0" + protobufjs "^7.1.2" + protobufjs-cli "^1.0.2" + +"@hashgraph/sdk@2.11.0-beta.1": + version "2.11.0-beta.1" + resolved "https://registry.yarnpkg.com/@hashgraph/sdk/-/sdk-2.11.0-beta.1.tgz#bc2d2dbc2c8768c78836dcaf108ec624887578d7" + integrity sha512-rpUSg0c580paop1uOvHhUFt7WGnDuvqC0iDpBr0Bp2jTOhgL12AOG5sF0RF/bEQfwAdsizgRBTT24xhmk07yhA== + dependencies: + "@grpc/grpc-js" "^1.5.3" + "@hashgraph/cryptography" "^1.1.0-beta.5" + "@hashgraph/proto" "2.1.5" + bignumber.js "^9.0.2" + crypto-js "^4.1.1" + js-base64 "^3.7.2" + js-logger "^1.6.1" + long "^4.0.0" + protobufjs "^6.11.2" + utf8 "^3.0.0" + +"@hashgraph/sdk@^2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@hashgraph/sdk/-/sdk-2.23.0.tgz#fa020d275bf061e554fd5b7adb9a1cc44cfa8b46" + integrity sha512-P/hv/mz1vmNLvQxtSzE6ptHaqmtDJtmM69FhJPEYf8fBklSPPWnBrA/jYEHm2lNSZwM1HyODEWcNfV+h44iA6w== + dependencies: + "@ethersproject/rlp" "^5.7.0" + "@grpc/grpc-js" "^1.7.3" + "@hashgraph/cryptography" "^1.4.3" + "@hashgraph/proto" "2.12.0" + axios "^1.3.1" + bignumber.js "^9.1.1" + crypto-js "^4.1.1" + js-base64 "^3.7.4" + js-logger "^1.6.1" + long "^4.0.0" + protobufjs "^7.1.2" + utf8 "^3.0.0" + +"@hethers/abstract-provider@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/abstract-provider/-/abstract-provider-1.1.1.tgz#1f1f946f5970cd56dd9a46b09dfaa0f66e8074a6" + integrity sha512-s3u4Cu2qpdWgLh7oYf/evCFk7sgZYlaaIhje6BMXFN+jOKgWWQA6MSECqHSc6h9p9eNEsKt1HmM7yWClikrzyQ== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/web" "5.5.0" + "@hethers/logger" "1.1.0" + "@hethers/networks" "1.1.0" + "@hethers/transactions" "1.1.1" + +"@hethers/abstract-signer@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/abstract-signer/-/abstract-signer-1.1.1.tgz#60d95c45811bad09c5eda9236b7ba3b9935c65bb" + integrity sha512-g6NyaC/Fwj+l30MqMudKRgL/zNJUcHFdJ5ZdRJAeJaOVBRl7Za3X/2Fz9/A1YJocnhvZFBygq67fl25a+1aKYw== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@hethers/abstract-provider" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/logger" "1.1.0" + "@hethers/transactions" "1.1.1" + +"@hethers/abstract-signer@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@hethers/abstract-signer/-/abstract-signer-1.1.2.tgz#f42d02b1d5763b77535ad5236174c476a4e9357d" + integrity sha512-F66cbneTByr/BlfXvXsZ1wfjxXAa1daTMV0YNWrBgsjuT/xZxyqfuEMCNeHVYSd91S7gNlGGdGcEqKcqlJpVew== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@hethers/abstract-provider" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/logger" "1.1.0" + "@hethers/transactions" "1.1.1" + +"@hethers/address@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/address/-/address-1.1.0.tgz#2b7f7d49524f211f12f27eedef68ed75cfebab53" + integrity sha512-aqZvvLe9n0Tc72aAGgjTR9NWLV+rcL9ORq9GOh9tuQ4GeY4XLT1vcI+liXMpjvDxAgEXfsgUWPW9MsZ7DOHSmA== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@hethers/logger" "1.1.0" + +"@hethers/constants@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/constants/-/constants-1.1.0.tgz#7c8b31e93b2e3ae77377880f66cb9ca23f9014cf" + integrity sha512-cto4CMH5bbLdzKyIHnBVx7aW1bipi92u94PBvXD3+EEdYgWMMSFhsAhNtpRo0YNovfG6Vqi5eqs+JM71bncnGw== + dependencies: + "@ethersproject/bignumber" "5.5.0" + +"@hethers/contracts@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/contracts/-/contracts-1.1.1.tgz#5f56f2741d46b810476f7d0a39b3c1f7a4019722" + integrity sha512-72zte2dgoLBnsf5DU1YtfbWvQ9OZh6S1qdBdRCxaNBc/3p0lTuxPWcerIuLeKV/HtDKnwSU4mYIoO46FWyZ2eA== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@hethers/abstract-provider" "1.1.1" + "@hethers/abstract-signer" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/logger" "1.1.0" + "@hethers/providers" "1.1.1" + "@hethers/transactions" "1.1.1" + +"@hethers/hdnode@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/hdnode/-/hdnode-1.1.1.tgz#9c2a53f496b405ae8636dabeecf62bcd6b99c365" + integrity sha512-/yECuQAUaCGIhcDG3x81XJOH6nDwahfMpSq7B7AWl+buS7tswBF9fYwAD/G9SzgnjB9LlIaBWCJcK1/Z5sU39g== + dependencies: + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/wordlists" "5.5.0" + "@hethers/abstract-signer" "1.1.1" + "@hethers/logger" "1.1.0" + "@hethers/signing-key" "1.1.0" + "@hethers/transactions" "1.1.1" + +"@hethers/json-wallets@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/json-wallets/-/json-wallets-1.1.1.tgz#8746dada5206e9ef819056ae856fdffe20de70d9" + integrity sha512-GtEHrKex0B0u3EdTX6tYrMpYESvS1zZNraE1Q/gFyWpB/VmwEze2aUApdcEDnWiOJOvZhg5E8QOaSZeHzMS0SQ== + dependencies: + "@ethersproject/bytes" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/random" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@hethers/abstract-signer" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/hdnode" "1.1.1" + "@hethers/logger" "1.1.0" + "@hethers/transactions" "1.1.1" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@hethers/logger@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/logger/-/logger-1.1.0.tgz#946017e30fd6b573f744d9bc76d005dd07e39549" + integrity sha512-EZAM5kirlNobe6auj7AUS1QyNOxunm9ZglatkC0fIx+9y4tEQsrx4asu5r2SPg1fgZiJ9mk2DbaidMWuHSr3kA== + +"@hethers/networks@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/networks/-/networks-1.1.0.tgz#55011e436566a0e34c8e3cab81ffd7eb16f709d0" + integrity sha512-xtS+5KHlyXND+1CbUCeMPJrqlyDk7ayhcxeAKSc7aHyHm1/wa3xI45W6tJj+AMDC8sGS5GZvAU3YrKSkUGTFdw== + dependencies: + "@hethers/address" "1.1.0" + "@hethers/logger" "1.1.0" + +"@hethers/providers@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/providers/-/providers-1.1.1.tgz#4dd374a75aeb99a03e93859b22d6f859dede8ec4" + integrity sha512-6CdwiB7GVD7tFm7G1mLemoVKgZ8KNiQvTTEyFxqazRFW6G8unVW07S104+hq/jfVL2eMoZP0O3LZLD+ny5Jelg== + dependencies: + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/random" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/web" "5.5.0" + "@hashgraph/proto" "2.1.5" + "@hashgraph/sdk" "2.11.0-beta.1" + "@hethers/abstract-provider" "1.1.1" + "@hethers/abstract-signer" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/constants" "1.1.0" + "@hethers/logger" "1.1.0" + "@hethers/networks" "1.1.0" + "@hethers/transactions" "1.1.1" + "@types/axios" "^0.14.0" + axios "^0.24.0" + bech32 "1.1.4" + ws "7.4.6" + +"@hethers/signing-key@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/signing-key/-/signing-key-1.1.0.tgz#796c450d1245552db74bfb34778ff71ce18fbff9" + integrity sha512-Xf+0a2DI3hLcnx2reFO5B7+JSwJMNc9iyb1iWtxi0h6dgrHIF5h0bdRJXSY8a19953hZ6jhDvk5RwEzDaamUqw== + dependencies: + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@hethers/logger" "1.1.0" bn.js "^4.11.9" elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" - integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/strings@5.4.0", "@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== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.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== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - -"@ethersproject/units@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" - integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/wallet@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" - integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" - "@ethersproject/json-wallets" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.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== - dependencies: - "@ethersproject/base64" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^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== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" +"@hethers/transactions@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/transactions/-/transactions-1.1.1.tgz#9e6bfa02547bede017065647eede0d49c1e3c23e" + integrity sha512-M4EL3l/xJ3MmtWSQEm8ZpD9LJUd9LPEi106VfBEL/ns/xcTW6wRlIw+xwLHdqDibZ8/Niu8SYN18LbHp/zY6ng== + dependencies: + "@ethersproject/base64" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@hethers/address" "1.1.0" + "@hethers/constants" "1.1.0" + "@hethers/logger" "1.1.0" + "@hethers/signing-key" "1.1.0" + +"@hethers/units@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@hethers/units/-/units-1.1.0.tgz#765cab6f4aa3fdb21687c6e4bd62a5587e98044c" + integrity sha512-FNxIQalKF4TbgtpEicN9U0HPjlIhnXF1iNouxy1QzQVt58j+elJ6pj7d6Ht5LtwTW/UogGfx95803DZFXqrIhw== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@hethers/logger" "1.1.0" + +"@hethers/wallet@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@hethers/wallet/-/wallet-1.1.1.tgz#f1eddf7e4a77b821faa85392745ef404655e9f96" + integrity sha512-tg6vrjZL1t1FQziCat7zBx2IjqfFbWsQv5WwZkHPjn7Y/lFzmZuVYdh90t7/p3rquC96VGdmqYa/557qdotzRw== + dependencies: + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/random" "5.5.0" + "@ethersproject/wordlists" "5.5.0" + "@hashgraph/sdk" "2.11.0-beta.1" + "@hethers/abstract-provider" "1.1.1" + "@hethers/abstract-signer" "1.1.1" + "@hethers/address" "1.1.0" + "@hethers/hdnode" "1.1.1" + "@hethers/json-wallets" "1.1.1" + "@hethers/logger" "1.1.0" + "@hethers/signing-key" "1.1.0" + "@hethers/transactions" "1.1.1" "@humanwhocodes/config-array@^0.5.0": version "0.5.0" @@ -592,25 +1069,63 @@ minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@improbable-eng/grpc-web-node-http-transport@0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web-node-http-transport/-/grpc-web-node-http-transport-0.15.0.tgz#5a064472ef43489cbd075a91fb831c2abeb09d68" + integrity sha512-HLgJfVolGGpjc9DWPhmMmXJx8YGzkek7jcCFO1YYkSOoO81MWRZentPOd/JiKiZuU08wtc4BG+WNuGzsQB5jZA== + +"@improbable-eng/grpc-web@0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web/-/grpc-web-0.15.0.tgz#3e47e9fdd90381a74abd4b7d26e67422a2a04bef" + integrity sha512-ERft9/0/8CmYalqOVnJnpdDry28q+j+nAlFFARdjyxXDJ+Mhgv9+F600QC8BR9ygOfrXRlAk6CvST2j+JCpQPg== + dependencies: + browser-headers "^0.4.1" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jsdoc/salty@^0.2.1": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.5.tgz#1b2fa5bb8c66485b536d86eee877c263d322f692" + integrity sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw== + dependencies: + lodash "^4.17.21" -"@json-rpc-tools/types@^1.6.1": +"@json-rpc-tools/types@^1.7.6": version "1.7.6" resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-1.7.6.tgz#5abd5fde01364a130c46093b501715bcce5bdc0e" integrity sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ== dependencies: keyvaluestorage-interface "^1.0.0" -"@json-rpc-tools/utils@1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/utils/-/utils-1.6.1.tgz#26e37d0fc4522721158d0f6057e136daa8813263" - integrity sha512-cNwP4QapAls+xATU8zLLqPYa9qCbgwEyWEK7vE1oH91b3LfbUYwHtiWZ1+rv0X/mh/9cWNTo2Oi2Sah/QX0WwA== +"@json-rpc-tools/utils@^1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@json-rpc-tools/utils/-/utils-1.7.6.tgz#67f04987dbaa2e7adb6adff1575367b75a9a9ba1" + integrity sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw== dependencies: - "@json-rpc-tools/types" "^1.6.1" + "@json-rpc-tools/types" "^1.7.6" + "@pedrouid/environment" "^1.0.1" -"@ledgerhq/devices@^5.28.0", "@ledgerhq/devices@^5.51.1": +"@ledgerhq/devices@^5.48.0", "@ledgerhq/devices@^5.51.1": version "5.51.1" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== @@ -620,11 +1135,36 @@ rxjs "6" semver "^7.3.5" -"@ledgerhq/errors@^5.28.0", "@ledgerhq/errors@^5.50.0": +"@ledgerhq/devices@^6.11.2": + version "6.27.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.27.1.tgz#3b13ab1d1ba8201e9e74a08f390560483978c962" + integrity sha512-jX++oy89jtv7Dp2X6gwt3MMkoajel80JFWcdc0HCouwDsV1mVJ3SQdwl/bQU0zd8HI6KebvUP95QTwbQLLK/RQ== + dependencies: + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/logs" "^6.10.0" + rxjs "6" + semver "^7.3.5" + +"@ledgerhq/devices@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.0.0.tgz#8fe9f9e442e28b7a20bcdf4c2eed06ce7b8f76ae" + integrity sha512-gSnRT0KPca+LIpaC6D/WZQjOAlSI5uCvK1dmxXtKhODLAj735rX5Z3SnGnLUavRCHNbUi44FzgvloF5BKTkh7A== + dependencies: + "@ledgerhq/errors" "^6.12.3" + "@ledgerhq/logs" "^6.10.1" + rxjs "6" + semver "^7.3.5" + +"@ledgerhq/errors@^5.34.0", "@ledgerhq/errors@^5.48.0", "@ledgerhq/errors@^5.50.0": version "5.50.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== +"@ledgerhq/errors@^6.10.0", "@ledgerhq/errors@^6.12.3": + version "6.12.3" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.12.3.tgz#a610caae1eeeb7cb038525e5212fe03217dda683" + integrity sha512-djiMSgB/7hnK3aLR/c5ZMMivxjcI7o2+y3VKcsZZpydPoVf9+FXqeJPRfOwmJ0JxbQ//LinUfWpIfHew8LkaVw== + "@ledgerhq/hw-transport-node-hid-noevents@^5.51.1": version "5.51.1" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz#71f37f812e448178ad0bcc2258982150d211c1ab" @@ -650,27 +1190,68 @@ node-hid "2.1.1" usb "^1.7.0" -"@ledgerhq/hw-transport-u2f@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.28.0.tgz#dc08d42203de1b3328b5c973628bbf39634a9f47" - integrity sha512-p/4CB+Sf5c1pLUjVWnHCm6Ll6atratfWlgFSmqt8yRxxejB5mwlK+4HkX8Tq4wgooZe2PqDuVTdFxGwiq4nAeg== +"@ledgerhq/hw-transport-u2f@^5.36.0-deprecated": + version "5.36.0-deprecated" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz#66e3ed399a117a1c0110871a055dd54f5fe707fd" + integrity sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg== dependencies: - "@ledgerhq/errors" "^5.28.0" - "@ledgerhq/hw-transport" "^5.28.0" - "@ledgerhq/logs" "^5.28.0" + "@ledgerhq/errors" "^5.34.0" + "@ledgerhq/hw-transport" "^5.34.0" + "@ledgerhq/logs" "^5.30.0" u2f-api "0.2.7" -"@ledgerhq/hw-transport-webusb@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.28.0.tgz#55761c3080210e8f8ddaf61a7e666a2f2c6c5caf" - integrity sha512-BTSA8T21ymxy3z1S3jJKMt9MvysYvyE2ZRkZm+gY35oJ9bm97PKTwe5/NLx9cwYxIem8/rJalREp4GAJESgELA== - dependencies: - "@ledgerhq/devices" "^5.28.0" - "@ledgerhq/errors" "^5.28.0" - "@ledgerhq/hw-transport" "^5.28.0" - "@ledgerhq/logs" "^5.28.0" - -"@ledgerhq/hw-transport@^5.19.1", "@ledgerhq/hw-transport@^5.28.0", "@ledgerhq/hw-transport@^5.51.1": +"@ledgerhq/hw-transport-web-ble@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-web-ble/-/hw-transport-web-ble-5.48.0.tgz#41b29293c263d8ed4200037eb6da4db3bd4268a6" + integrity sha512-ezgssFvxc4/UbfwIxwg9jEn0/yiND8TW6bDkaE3kAqKCa8ZYYgFtms8iRqjTOJlqcbSYkudbNhP74jtY0NxfdA== + dependencies: + "@ledgerhq/devices" "^5.48.0" + "@ledgerhq/errors" "^5.48.0" + "@ledgerhq/hw-transport" "^5.48.0" + "@ledgerhq/logs" "^5.48.0" + rxjs "^6.6.7" + +"@ledgerhq/hw-transport-webhid@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-5.48.0.tgz#aab2cffac3d5c97b04f093e2a0cbfe311dfdeab4" + integrity sha512-g6TYxgPX3MqP3jQ4SJaJjlM+2SwUSk4Si/9MeKLwz5ySbiD3bSTh/Gbzv8VBCaHPO4fILujc5vW/xejJuMzR8w== + dependencies: + "@ledgerhq/devices" "^5.48.0" + "@ledgerhq/errors" "^5.48.0" + "@ledgerhq/hw-transport" "^5.48.0" + "@ledgerhq/logs" "^5.48.0" + +"@ledgerhq/hw-transport-webhid@^6.11.2": + version "6.27.12" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.27.12.tgz#dd5073c5da05c6c3234a76a6e44ed576fe198757" + integrity sha512-Yhy5dOKeJIU24Dh9xQjrStc++NviPjRSGHsbc1PeyEjgPEGc8q8wtvm7WFBDzmymBwMhIA5eoNj3fGLk/voXQQ== + dependencies: + "@ledgerhq/devices" "^8.0.0" + "@ledgerhq/errors" "^6.12.3" + "@ledgerhq/hw-transport" "^6.28.1" + "@ledgerhq/logs" "^6.10.1" + +"@ledgerhq/hw-transport-webusb@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.48.0.tgz#62e5bffffba853d4e06103f7c8e9b6c87ca0f994" + integrity sha512-tO+p11aRQx9q9ifmi/NCbCBKQ738lp+PROy1BWSzjCJcUEz1sKTLeRTLE2Xze25KebhuM2YR1NgkX5LN1z4upA== + dependencies: + "@ledgerhq/devices" "^5.48.0" + "@ledgerhq/errors" "^5.48.0" + "@ledgerhq/hw-transport" "^5.48.0" + "@ledgerhq/logs" "^5.48.0" + +"@ledgerhq/hw-transport-webusb@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.11.2.tgz#d190709881e50f8c271efe956705b05e46b4649d" + integrity sha512-ReiYoypXybLQi1ekA+YQqsvbSj0wwTFH7Lg690eUkqZydjDd4lMjpZk7lDczsXp3wxTjE/mdAQ0bpNwZWmPTJw== + dependencies: + "@ledgerhq/devices" "^6.11.2" + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/hw-transport" "^6.11.2" + "@ledgerhq/logs" "^6.10.0" + +"@ledgerhq/hw-transport@^5.19.1", "@ledgerhq/hw-transport@^5.34.0", "@ledgerhq/hw-transport@^5.48.0", "@ledgerhq/hw-transport@^5.51.1": version "5.51.1" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== @@ -679,11 +1260,227 @@ "@ledgerhq/errors" "^5.50.0" events "^3.3.0" -"@ledgerhq/logs@^5.28.0", "@ledgerhq/logs@^5.50.0": +"@ledgerhq/hw-transport@^6.11.2", "@ledgerhq/hw-transport@^6.28.1": + version "6.28.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.28.1.tgz#cb22fe9bc23af4682c30f2aac7fe6f7ab13ed65a" + integrity sha512-RaZe+abn0zBIz82cE9tp7Y7aZkHWWbEaE2yJpfxT8AhFz3fx+BU0kLYzuRN9fmA7vKueNJ1MTVUCY+Ex9/CHSQ== + dependencies: + "@ledgerhq/devices" "^8.0.0" + "@ledgerhq/errors" "^6.12.3" + events "^3.3.0" + +"@ledgerhq/logs@^5.30.0", "@ledgerhq/logs@^5.48.0", "@ledgerhq/logs@^5.50.0": version "5.50.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== +"@ledgerhq/logs@^6.10.0", "@ledgerhq/logs@^6.10.1": + version "6.10.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.10.1.tgz#5bd16082261d7364eabb511c788f00937dac588d" + integrity sha512-z+ILK8Q3y+nfUl43ctCPuR4Y2bIxk/ooCQFwZxhtci1EhAtMDzMAx2W25qx8G1PPL9UUOdnUax19+F0OjXoj4w== + +"@metaplex-foundation/beet-solana@^0.3.0", "@metaplex-foundation/beet-solana@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz#4b37cda5c7f32ffd2bdd8b3164edc05c6463ab35" + integrity sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g== + dependencies: + "@metaplex-foundation/beet" ">=0.1.0" + "@solana/web3.js" "^1.56.2" + bs58 "^5.0.0" + debug "^4.3.4" + +"@metaplex-foundation/beet-solana@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz#52891e78674aaa54e0031f1bca5bfbc40de12e8d" + integrity sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ== + dependencies: + "@metaplex-foundation/beet" ">=0.1.0" + "@solana/web3.js" "^1.56.2" + bs58 "^5.0.0" + debug "^4.3.4" + +"@metaplex-foundation/beet@0.7.1", "@metaplex-foundation/beet@>=0.1.0", "@metaplex-foundation/beet@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.7.1.tgz#0975314211643f87b5f6f3e584fa31abcf4c612c" + integrity sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA== + dependencies: + ansicolors "^0.3.2" + bn.js "^5.2.0" + debug "^4.3.3" + +"@metaplex-foundation/beet@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.4.0.tgz#eb2a0a6eb084bb25d67dd9bed2f7387ee7e63a55" + integrity sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA== + dependencies: + ansicolors "^0.3.2" + bn.js "^5.2.0" + debug "^4.3.3" + +"@metaplex-foundation/beet@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.6.1.tgz#6331bdde0648bf2cae6f9e482f8e3552db05d69f" + integrity sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw== + dependencies: + ansicolors "^0.3.2" + bn.js "^5.2.0" + debug "^4.3.3" + +"@metaplex-foundation/cusper@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz#dc2032a452d6c269e25f016aa4dd63600e2af975" + integrity sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA== + +"@metaplex-foundation/js@0.17.6": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/js/-/js-0.17.6.tgz#8120b0734e7570a3a129035b5c1464b6fee1f589" + integrity sha512-GYoW4xoO6OGPwbCXclxjUsgyHwj1L7uyUAXN3rH/nzJG5j+9RSry//6D9RFHsg1WRzyVP1NwXBJFJJ5yvDQRAQ== + dependencies: + "@bundlr-network/client" "^0.8.8" + "@metaplex-foundation/beet" "0.7.1" + "@metaplex-foundation/mpl-auction-house" "^2.3.0" + "@metaplex-foundation/mpl-candy-guard" "^0.3.0" + "@metaplex-foundation/mpl-candy-machine" "^4.6.0" + "@metaplex-foundation/mpl-candy-machine-core" "^0.1.2" + "@metaplex-foundation/mpl-token-metadata" "^2.3.3" + "@noble/ed25519" "^1.7.1" + "@noble/hashes" "^1.1.3" + "@solana/spl-token" "^0.3.5" + "@solana/web3.js" "^1.63.1" + bignumber.js "^9.0.2" + bn.js "^5.2.1" + bs58 "^5.0.0" + buffer "^6.0.3" + debug "^4.3.4" + eventemitter3 "^4.0.7" + lodash.clonedeep "^4.5.0" + lodash.isequal "^4.5.0" + merkletreejs "^0.2.32" + mime "^3.0.0" + node-fetch "^2.6.7" + +"@metaplex-foundation/mpl-auction-house@^2.3.0": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.3.2.tgz#0cb1becb862b1c97d4448b12177108fa869c4461" + integrity sha512-Msj2hYuAi25hj0kmLIlBG2TafsvIDlEa6GlOcWr91z+wCn0rnrCy50p0QkbGY+qmhe7LQYWtwtA7rsqMj9IDpA== + dependencies: + "@metaplex-foundation/beet" "^0.6.1" + "@metaplex-foundation/beet-solana" "^0.3.1" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/spl-token" "^0.3.5" + "@solana/web3.js" "^1.56.2" + bn.js "^5.2.0" + +"@metaplex-foundation/mpl-candy-guard@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz#426e89793676b42e9bbb5e523303fba36ccd5281" + integrity sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q== + dependencies: + "@metaplex-foundation/beet" "^0.4.0" + "@metaplex-foundation/beet-solana" "^0.3.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/web3.js" "^1.66.2" + bn.js "^5.2.0" + +"@metaplex-foundation/mpl-candy-machine-core@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz#07e19558d0ef120fac1d8612ae4de90d52cd4d1f" + integrity sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw== + dependencies: + "@metaplex-foundation/beet" "^0.4.0" + "@metaplex-foundation/beet-solana" "^0.3.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/web3.js" "^1.56.2" + bn.js "^5.2.0" + +"@metaplex-foundation/mpl-candy-machine@^4.6.0": + version "4.7.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-4.7.1.tgz#ecf6ebbe96245084c9a186761ecc51c62ce1206f" + integrity sha512-tBNRAfBE/rYy9pe2aJD4gTFw+pgQ11o3AJjoYGB4+05ow0VjJMSt6kQGzHm2LRPgdLY4diKAq8qHvgsbV5ikNQ== + dependencies: + "@metaplex-foundation/beet" "^0.4.0" + "@metaplex-foundation/beet-solana" "^0.3.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@metaplex-foundation/mpl-core" "^0.6.1" + "@solana/web3.js" "^1.35.1" + +"@metaplex-foundation/mpl-core@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-core/-/mpl-core-0.6.1.tgz#bdc76a8b447a2ef310693973bf430e5ecec6ef0b" + integrity sha512-6R4HkfAqU2EUakNbVLcCmka0YuQTLGTbHJ62ig765+NRWuB2HNGUQ1HfHcRsGnyxhlCvwKK79JE01XUjFE+dzw== + dependencies: + "@solana/web3.js" "^1.35.1" + bs58 "^4.0.1" + +"@metaplex-foundation/mpl-token-metadata@^2.3.3": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.8.4.tgz#ef73e17060a2bb7a75f5aa9201070f16db462364" + integrity sha512-QhEMjmYzwBAiJAzDv8M9GuNLfqExt46oVrIYlKml7htP3RpkG7aEzr24wWlgLos2YoGwabWwg2d+iT9DergCQw== + dependencies: + "@metaplex-foundation/beet" "^0.7.1" + "@metaplex-foundation/beet-solana" "^0.4.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/spl-token" "^0.3.6" + "@solana/web3.js" "^1.66.2" + bn.js "^5.2.0" + debug "^4.3.4" + +"@multiversx/sdk-core@^11.4.1": + version "11.4.1" + resolved "https://registry.yarnpkg.com/@multiversx/sdk-core/-/sdk-core-11.4.1.tgz#fbb3165107bb27ee8c5efbfe51b63936b4867ff4" + integrity sha512-kGnSoEcygBUpOABJgpJIbeRBptQ54xq/OVHcw/pOAi0koLJHgu4xiwPihcsxMJ4jWN4PrWDy+zMo/ypeozYVGg== + dependencies: + "@multiversx/sdk-transaction-decoder" "1.0.2" + bech32 "1.1.4" + bignumber.js "9.0.1" + blake2b "2.1.3" + buffer "6.0.3" + json-duplicate-key-handle "1.0.0" + keccak "3.0.2" + protobufjs "6.11.3" + +"@multiversx/sdk-transaction-decoder@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@multiversx/sdk-transaction-decoder/-/sdk-transaction-decoder-1.0.2.tgz#83ded4f6d4b877b4421234856eb19709be2af31b" + integrity sha512-j43QsKquu8N51WLmVlJ7dV2P3A1448R7/ktvl8r3i6wRMpfdtzDPNofTdHmMRT7DdQdvs4+RNgz8hVKL11Etsw== + dependencies: + bech32 "^2.0.0" + +"@noble/ed25519@^1.6.1", "@noble/ed25519@^1.7.0", "@noble/ed25519@^1.7.1": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" + integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== + +"@noble/hashes@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" + integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== + +"@noble/hashes@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" + integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== + +"@noble/hashes@^1.1.2", "@noble/hashes@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@~1.1.1": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11" + integrity sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ== + +"@noble/secp256k1@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@noble/secp256k1@^1.6.3": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -705,13 +1502,26 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@octokit/auth-token@^2.4.0": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" - integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== dependencies: "@octokit/types" "^6.0.3" +"@octokit/core@^3.5.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.3" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + "@octokit/endpoint@^6.0.1": version "6.0.12" resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" @@ -721,41 +1531,41 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-8.3.0.tgz#8bc912edae8c03e002882cf1e29b595b7da9b441" - integrity sha512-ZFyQ30tNpoATI7o+Z9MWFUzUgWisB8yduhcky7S4UYsRijgIGSnwUKzPBDGzf/Xkx1DuvUtqzvmuFlDSqPJqmQ== +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.21.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" + integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== dependencies: - "@octokit/types" "^2.0.1" + "@octokit/types" "^6.40.0" -"@octokit/plugin-request-log@^1.0.0": +"@octokit/plugin-request-log@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.16.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" + integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== dependencies: - "@octokit/types" "^2.0.1" + "@octokit/types" "^6.39.0" deprecation "^2.3.1" -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.1.0": +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== @@ -764,479 +1574,614 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" - integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== +"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.1.0" "@octokit/types" "^6.16.1" is-plain-object "^5.0.0" - node-fetch "^2.6.1" + node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^16.43.1": - version "16.43.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" - integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" +"@octokit/rest@^18.12.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +"@osmonauts/helpers@0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@osmonauts/helpers/-/helpers-0.3.8.tgz#77a57cdd20922cd477f21de9662a403620e2c848" + integrity sha512-6xM/DGjLctziRVT2DuR7/MQ/HqfHAcqOaGF4z77Jeh3RWQ78zWiaRVxBefRQdKaqrh5LhXL6VebUdiy9IGwTTA== + dependencies: + "@babel/runtime" "^7.18.3" + long "^5.2.0" + protobufjs "^6.11.3" -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.16.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" - integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== +"@peculiar/asn1-schema@^2.1.6", "@peculiar/asn1-schema@^2.3.0": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.3.tgz#21418e1f3819e0b353ceff0c2dad8ccb61acd777" + integrity sha512-6GptMYDMyWBHTUKndHaDsRZUO/XMSgIns2krxcm2L7SEExRHwawFvSwNBhqNPR9HJwv3MruAiF1bhN0we6j6GQ== dependencies: - "@types/node" ">= 8" + asn1js "^3.0.5" + pvtsutils "^1.3.2" + tslib "^2.4.0" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": - version "6.19.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.19.0.tgz#e2b6fedb10c8b53cf4574aa5d1a8a5611295297a" - integrity sha512-9wdZFiJfonDyU6DjIgDHxAIn92vdSUBOwAXbO2F9rOFt6DJwuAkyGLu1CvdJPphCbPBoV9iSDMX7y4fu0v6AtA== +"@peculiar/json-schema@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" + integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== + dependencies: + tslib "^2.0.0" + +"@peculiar/webcrypto@^1.0.22", "@peculiar/webcrypto@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz#821493bd5ad0f05939bd5f53b28536f68158360a" + integrity sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw== dependencies: - "@octokit/openapi-types" "^8.3.0" + "@peculiar/asn1-schema" "^2.3.0" + "@peculiar/json-schema" "^1.1.12" + pvtsutils "^1.3.2" + tslib "^2.4.1" + webcrypto-core "^1.7.4" "@pedrouid/environment@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@pedrouid/environment/-/environment-1.0.1.tgz#858f0f8a057340e0b250398b75ead77d6f4342ec" integrity sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug== -"@pedrouid/iso-crypto@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@pedrouid/iso-crypto/-/iso-crypto-1.1.0.tgz#3fb4050ea99f2f8ee41ba8661193c0989c815c95" - integrity sha512-twi+tW67XT0BSOv4rsegnGo4TQMhfFswS/GY3KhrjFiNw3z9x+cMkfO+itNe1JZghQxsxHuhifvfsnG814g1hQ== +"@project-serum/anchor@^0.25.0-beta.1": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" + integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== dependencies: - "@pedrouid/iso-random" "^1.1.0" - aes-js "^3.1.2" - enc-utils "^3.0.0" - hash.js "^1.1.7" + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" -"@pedrouid/iso-random@^1.1.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@pedrouid/iso-random/-/iso-random-1.2.1.tgz#55178d9a2e7897b0f630dd1b4be76bc8460242d7" - integrity sha512-C35NqYMmLsg61WDiEup4OwjRhgfZIcK4BL+Qg49xowHUJ+f7/LFZCO+TGuQqoXFAj1beKIOpUN33f0fqV7zneQ== +"@project-serum/borsh@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" + integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== dependencies: - "@pedrouid/environment" "^1.0.1" - enc-utils "^3.0.0" - randombytes "^2.1.0" + bn.js "^5.1.2" + buffer-layout "^1.2.0" -"@polkadot/api-contract@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-5.2.1.tgz#38ffcc10a2ed37fae4f228d984e5efcadd814ad2" - integrity sha512-P+dJ66JNTBywdnRnFRh29b776AozKFPLtWtxS/6QV1t40dpK5EyYVJOAdDNs/5i4G5DEvUqTnyC/IfWLIZu8iw== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/api" "5.2.1" - "@polkadot/types" "5.2.1" - "@polkadot/util" "^7.0.3" - rxjs "^7.2.0" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== -"@polkadot/api-derive@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-5.2.1.tgz#40c2bf1af88a5ad0582209a5208456fb880e91ff" - integrity sha512-5W0hrXh7N2a6bAr6LqpegsLXxJW8tqtZFGkLwydUL4GoWvtbq5zGC7Ojosdyvr1oEY0hNCRMFMb0BIgQYil0kQ== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/api" "5.2.1" - "@polkadot/rpc-core" "5.2.1" - "@polkadot/types" "5.2.1" - "@polkadot/util" "^7.0.3" - "@polkadot/util-crypto" "^7.0.3" - rxjs "^7.2.0" - -"@polkadot/api@5.2.1", "@polkadot/api@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-5.2.1.tgz#537422c0f5b9b34d729a0866cffcd9f1a54db21f" - integrity sha512-3YO0J7oEd6ORBEwQttq8gwoPv3F2RfyHxb1/WzjQDeM/3+E8pZ1Xyh4DiQmiDSyR9O9eTvY0lpb0Areu4A/1DQ== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/api-derive" "5.2.1" - "@polkadot/keyring" "^7.0.3" - "@polkadot/rpc-core" "5.2.1" - "@polkadot/rpc-provider" "5.2.1" - "@polkadot/types" "5.2.1" - "@polkadot/types-known" "5.2.1" - "@polkadot/util" "^7.0.3" - "@polkadot/util-crypto" "^7.0.3" - eventemitter3 "^4.0.7" - rxjs "^7.2.0" +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== -"@polkadot/keyring@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.0.3.tgz#845539d1c099bf2c01e030cd1f8817aacce2bb7d" - integrity sha512-aHYQJ+LDgnsa2C7uGGzgR8lv30VZDg+bGa11CSs94jeCsm8Ns+dU+1hGEXSJySnDQ3TsJWmg66ijeTwmiJcE9g== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/util" "7.0.3" - "@polkadot/util-crypto" "7.0.3" +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== -"@polkadot/networks@7.0.3", "@polkadot/networks@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.0.3.tgz#6d1d8bc284bc2158919feabc155ff0075e9af4d9" - integrity sha512-DH1lbj1I0ZFxdMtY95l9MY9xybUriTa1aQ22ER+/zj3ov4v4C9VAs+i0ssi+aKwrJ+yReyQBzMLOoSba1+pykg== - dependencies: - "@babel/runtime" "^7.14.8" +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== -"@polkadot/networks@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.1.1.tgz#ef1e190961dffa5e9f33ec7a5929f1d82bdb3761" - integrity sha512-bplFFzBfqWl5Y9ekFDqVEORQVAyjiU40Tq2hCQLoQq2sFXxUZaMeQLvCOty5FDN9cH2h8wIXxok+JpdDMft08g== +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: - "@babel/runtime" "^7.14.8" + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" -"@polkadot/rpc-core@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-5.2.1.tgz#cdd20c25618739c5a60e613fad3820b862c90c73" - integrity sha512-/MxGC284txgK9oHfNuA0200VfJNGTtiOpFNtv7dfWRm9GjLoLyftdPkKGzqcFcCHl0K7/6Nx7KYnoEROtaRE2A== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/rpc-provider" "5.2.1" - "@polkadot/types" "5.2.1" - "@polkadot/util" "^7.0.3" - rxjs "^7.2.0" +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== -"@polkadot/rpc-provider@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-5.2.1.tgz#5134178462f01f12f36a63e30d35d8cfd003fd15" - integrity sha512-yoW1cIHcRFfQxYJGz0ihlGEEWtUJFpRlcOZLYX7eN14+vw0QqyknVCbEfVOMcZtzHnBSKBvrst4FScY7XmQCWA== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/types" "5.2.1" - "@polkadot/util" "^7.0.3" - "@polkadot/util-crypto" "^7.0.3" - "@polkadot/x-fetch" "^7.0.3" - "@polkadot/x-global" "^7.0.3" - "@polkadot/x-ws" "^7.0.3" - eventemitter3 "^4.0.7" +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== -"@polkadot/types-known@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-5.2.1.tgz#d2b8ffad83b19255d0fa76222c518b0816f90673" - integrity sha512-pFeEiVGs6J+E2tHXmYB/NRIzrP56kH/ymx+jw5JAfOkc0tPo5RXZwnlO31XK0bHm4iUXoIQ/Eb8j2OW4SAhz3Q== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/networks" "^7.0.3" - "@polkadot/types" "5.2.1" - "@polkadot/util" "^7.0.3" +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== -"@polkadot/types@5.2.1", "@polkadot/types@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-5.2.1.tgz#b772723d1f660c17c629520d4f7b4b8f95971774" - integrity sha512-X1dEXkTWTXLTQsMp1QY8ur58cm2/IA4RZ1ppyPkm170h26wOeCR6pstYu2cvj6Jp567c+Yq0P5qJa93VGfqxtw== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/util" "^7.0.3" - "@polkadot/util-crypto" "^7.0.3" - rxjs "^7.2.0" +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== -"@polkadot/util-crypto@7.0.3", "@polkadot/util-crypto@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.0.3.tgz#2a69eec86a067f6f2fa36cfda9796eb91fc823e3" - integrity sha512-z386lw+0uBNGuBOQ7Ay0jF9f5WdKzbxYwnJarnsRDIxqzoAm51U+V9dqgyAbxKh95+pcxLnKs/1bTI2Uy564Fg== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/networks" "7.0.3" - "@polkadot/util" "7.0.3" - "@polkadot/wasm-crypto" "^4.1.2" - "@polkadot/x-randomvalues" "7.0.3" - base-x "^3.0.8" - base64-js "^1.5.1" - blakejs "^1.1.1" - bn.js "^4.11.9" - create-hash "^1.2.0" - elliptic "^6.5.4" - hash.js "^1.1.7" - js-sha3 "^0.8.0" - scryptsy "^2.1.0" - tweetnacl "^1.0.3" - xxhashjs "^0.2.2" - -"@polkadot/util-crypto@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.1.1.tgz#48895489686ef922afadc49c08f5d9678e3120a1" - integrity sha512-EhbER6ftk+Ft+hedlu5lfRN9RoCpe97w9dS/jFfiqJrXUvpNtxz3RZUIoNW2Cxav68znvTn/Ak/Vb1/RSF7YFg== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/networks" "7.1.1" - "@polkadot/util" "7.1.1" - "@polkadot/wasm-crypto" "^4.1.2" - "@polkadot/x-randomvalues" "7.1.1" - base-x "^3.0.8" - base64-js "^1.5.1" - blakejs "^1.1.1" - bn.js "^4.11.9" - create-hash "^1.2.0" - ed2curve "^0.3.0" - elliptic "^6.5.4" - hash.js "^1.1.7" - js-sha3 "^0.8.0" - scryptsy "^2.1.0" - tweetnacl "^1.0.3" - xxhashjs "^0.2.2" +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@polkadot/util@7.0.3", "@polkadot/util@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.0.3.tgz#89887a18c0e39b2b1e22554974e9e02649db6018" - integrity sha512-2wrF+zCOg/3YTOF8mSMpaFEcRshiCKqhNK54A+EJ/qBS+olVw7Ghzjapxxt/pCmPzhJXXra9InT0QovZaqaW4g== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-textdecoder" "7.0.3" - "@polkadot/x-textencoder" "7.0.3" - "@types/bn.js" "^4.11.6" - bn.js "^4.11.9" - camelcase "^5.3.1" - ip-regex "^4.3.0" +"@randlabs/communication-bridge@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz#d1ecfc29157afcbb0ca2d73122d67905eecb5bf3" + integrity sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg== -"@polkadot/util@7.1.1", "@polkadot/util@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.1.1.tgz#1df133296ecd194a566677b68e51f93118f11c1e" - integrity sha512-FJvWGtU/XlXpORUez4TJuqTZPvW9uGW1QNAXVcaXgGrejijMDCc/uvXscOOm2QIBtSBEx092+MzeReQPoEAUbg== +"@randlabs/myalgo-connect@^1.1.1", "@randlabs/myalgo-connect@^1.1.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz#ce3ad97b3889ea21da75852187511d3f6be0fa05" + integrity sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-textdecoder" "7.1.1" - "@polkadot/x-textencoder" "7.1.1" - "@types/bn.js" "^4.11.6" - bn.js "^4.11.9" - camelcase "^5.3.1" - ip-regex "^4.3.0" + "@randlabs/communication-bridge" "1.0.1" -"@polkadot/wasm-crypto-asmjs@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.1.2.tgz#094b3eeeb5fd39a93db177583b48454511874cfc" - integrity sha512-3Q+vVUxDAC2tXgKMM3lKzx2JW+tarDpTjkvdxIKATyi8Ek69KkUqvMyJD0VL/iFZOFZED0YDX9UU4XOJ/astlg== - dependencies: - "@babel/runtime" "^7.14.6" +"@scarf/scarf@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.1.1.tgz#d8b9f20037b3a37dbf8dcdc4b3b72f9285bfce35" + integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== -"@polkadot/wasm-crypto-wasm@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.1.2.tgz#773c78c1d65886671d3ba1d66c31afd86c93d02f" - integrity sha512-/l4IBEdQ41szHdHkuF//z1qr+XmWuLHlpBA7s9Eb221m1Fir6AKoCHoh1hp1r3v0ecZYLKvak1B225w6JAU3Fg== - dependencies: - "@babel/runtime" "^7.14.6" +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@polkadot/wasm-crypto@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.1.2.tgz#dead71ae5d2f7722d23aed5be2112e1732d315e9" - integrity sha512-2EKdOjIrD2xHP2rC+0G/3Qo6926nL/18vCFkd34lBd9zP9YNF2GDEtDY+zAeDIRFKe1sQHTpsKgNdYSWoV2eBg== +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== dependencies: - "@babel/runtime" "^7.14.6" - "@polkadot/wasm-crypto-asmjs" "^4.1.2" - "@polkadot/wasm-crypto-wasm" "^4.1.2" + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" -"@polkadot/x-fetch@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-7.0.3.tgz#c07b7837de70ffcc21d85f8d7e70eced6b6ccb41" - integrity sha512-zITf1RLq0+yxXZ5N9ORsKCx1zC+cBmaRhM97xVG2MVDS0+hL5veqVrWdw7aT8RPaFDxTEB4Mk2V618nPv1CFGw== +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.0.3" - "@types/node-fetch" "^2.5.12" - node-fetch "^2.6.1" + "@hapi/hoek" "^9.0.0" -"@polkadot/x-global@7.0.3", "@polkadot/x-global@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.0.3.tgz#755fa6e740f00d8e34133a3cd11fe5a34d234631" - integrity sha512-hot5xzhw9nexv9G/mwKoyf+my4I0lBc+DbeEWnjq3cy3e/NjwpTudhHvKQtVUz/RV2RsYnEyulXkJappjIO5MQ== - dependencies: - "@babel/runtime" "^7.14.8" +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== -"@polkadot/x-global@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.1.1.tgz#ca7ebec3b336120af999fc55a8939be4a910274f" - integrity sha512-Sc5UPhHPMir0pu3yuMVOQ4dUC55fNSkzSg94jZXZtmsYVAqdi6zmd+TkwNxwW+I/Yz9Sw/UTA+jtalcwknR/+A== - dependencies: - "@babel/runtime" "^7.14.8" +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@polkadot/x-global@7.2.1": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.2.1.tgz#32207936b7f939a21da608f82ca20535f9148cda" - integrity sha512-VNW+76TxEPqvBy3XMNV05mJRPRGZcYh3k5HjW4+asYeFunMahH4zjmCulhtD9SRI/TqdfHTiqDOqKNKe2xJcVg== - dependencies: - "@babel/runtime" "^7.15.3" +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@polkadot/x-randomvalues@7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.0.3.tgz#3559efabe8c2cac442b040e18c636f2dcec9064f" - integrity sha512-ETHr/e2iGEzaSkE8/GkUJfW0NBRhQj0PdOU+PfObkYz8iqJGtncmUOnu/LaZ0IJxLrhTASMcJv19KliJ0+kmMQ== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.0.3" +"@socket.io/component-emitter@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@polkadot/x-randomvalues@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.1.1.tgz#d4b293a396291609b34fcb35aa40207dd75c9b23" - integrity sha512-59QXByEmhJ79HWr62qb+DUhHhPD88gQ0enVOGr0+uxWSt7eD0hykBAv+qS/J37ijTsKPZYkv+pSSjf0GAb/VYA== +"@solana/buffer-layout-utils@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" + integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.1.1" + "@solana/buffer-layout" "^4.0.0" + "@solana/web3.js" "^1.32.0" + bigint-buffer "^1.1.5" + bignumber.js "^9.0.1" -"@polkadot/x-randomvalues@^7.1.1": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.2.1.tgz#708b7a54bd90ec091ab54e125d8b52e0853ea86b" - integrity sha512-B4sjwX+gFweZ1YM1Cg/S9hAEx9E/gV/vqLW89PJB6+hyvsPS9eiVvfVpaOsohc7AgmuINm/bSQbNZvtC+BbbKw== +"@solana/buffer-layout@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/x-global" "7.2.1" + buffer "~6.0.3" -"@polkadot/x-textdecoder@7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.0.3.tgz#eccf602afb85bb94406f99284a62d58a5c7142c8" - integrity sha512-YIE5UYcoeRjGLkWMnqLhboPLEewvqsIB0lR4rz95uTdXOjbQPIdYln5P3coUGlMWobvd/8iVTb2FsXxu6opSGg== +"@solana/spl-token@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" + integrity sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/web3.js" "^1.32.0" + start-server-and-test "^1.14.0" + +"@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.6": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.7.tgz#6f027f9ad8e841f792c32e50920d9d2e714fc8da" + integrity sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + buffer "^6.0.3" + +"@solana/wallet-adapter-base@^0.9.2": + version "0.9.21" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.21.tgz#6e73e550aa64a12174ec746bbf338c21209cf70e" + integrity sha512-UPC7GKAMbeoF5Ki+eTi1BHCTjbhtxGIAbgfzSkgYYQKoziDcSr5EgdBL1ntO6wwe6/fRByO6J4q/Dhr7vakz7A== + dependencies: + "@solana/wallet-standard-features" "^1.0.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.1" + eventemitter3 "^4.0.0" + +"@solana/wallet-standard-features@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.0.0.tgz#fee71c47fa8c4bacbdc5c8750487e60a2e5e6746" + integrity sha512-cZKUm2w67MQOAzbfdZCGAbePWuqSwpvpbWA2K2D0UcHX30I8ry8YEeHlqwqULIOTeY8lRCHu8WMxZwC9iMEqHQ== + dependencies: + "@wallet-standard/base" "^1.0.0" + "@wallet-standard/features" "^1.0.0" + +"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.35.1", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.44.2", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2": + version "1.73.2" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.73.2.tgz#4b30cd402b35733dae3a7d0b638be26a7742b395" + integrity sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA== + dependencies: + "@babel/runtime" "^7.12.5" + "@noble/ed25519" "^1.7.0" + "@noble/hashes" "^1.1.2" + "@noble/secp256k1" "^1.6.3" + "@solana/buffer-layout" "^4.0.0" + agentkeepalive "^4.2.1" + bigint-buffer "^1.1.5" + bn.js "^5.0.0" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.1" + fast-stable-stringify "^1.0.0" + jayson "^3.4.4" + node-fetch "2" + rpc-websockets "^7.5.0" + superstruct "^0.14.2" + +"@stablelib/binary@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.0.3" + "@stablelib/int" "^1.0.1" -"@polkadot/x-textdecoder@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.1.1.tgz#a7e0a0259f49bdb405d665355bbbc85f79e06790" - integrity sha512-/z1tOckFl4QL6wtuwyG7YSC5YZvlGP0AU5swj9u/FHij6JFYrCsyU7oQqUWft7FjlwCOdL9bEEgU0YOYn3VVVg== +"@stablelib/blake2b@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/blake2b/-/blake2b-1.0.1.tgz#0045a77e182c4cf3260bc9b533fc4cd5c287f8ea" + integrity sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.1.1" + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@polkadot/x-textencoder@7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.0.3.tgz#92125d2f58f6d6dc7337856e9f2a6edca0e38655" - integrity sha512-3BmcOnjdti85s2Y7jDzfM5VP+a3yPRYlX/9o3FkVoGwRHP28mx9Vch6Wu9Yimmd3OZvWd3/yIxTzua1GWC1f7w== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.0.3" +"@stablelib/bytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" + integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== -"@polkadot/x-textencoder@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.1.1.tgz#700938abed80a2c1ff277dcd7b696aca22ec7b50" - integrity sha512-BThyyjonSseOlNe2z+glLwz+JX3/+8E/0pSyzfNUyESBOPPj/Vmraz93AQUMCiIRSClLOa8DMXxntns3cN83LA== - dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.1.1" +"@stablelib/constant-time@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" + integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== -"@polkadot/x-ws@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-7.0.3.tgz#99ef769739a555e7eeb2ab6de0aba43d9888e545" - integrity sha512-GFPy07ofxSOZODj9eYI3RD46R3eX6CXmRDpxxh50Ors/j8TCKJ8OSKmCCxdT4Y22y3URtxJTs1dbpzUSZZS8Zw== +"@stablelib/ed25519@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" + integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== dependencies: - "@babel/runtime" "^7.14.8" - "@polkadot/x-global" "7.0.3" - "@types/websocket" "^1.0.3" - websocket "^1.0.34" + "@stablelib/random" "^1.0.2" + "@stablelib/sha512" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= +"@stablelib/hash@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" + integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== +"@stablelib/int@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" + integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== +"@stablelib/keyagreement@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" + integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== + dependencies: + "@stablelib/bytes" "^1.0.1" -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= +"@stablelib/nacl@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@stablelib/nacl/-/nacl-1.0.4.tgz#b63e0a1b87eccb13ad91dd46b2382112acfa417e" + integrity sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw== + dependencies: + "@stablelib/poly1305" "^1.0.1" + "@stablelib/random" "^1.0.2" + "@stablelib/wipe" "^1.0.1" + "@stablelib/x25519" "^1.0.3" + "@stablelib/xsalsa20" "^1.0.2" -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= +"@stablelib/poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" + integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@protobufjs/float@^1.0.2": +"@stablelib/random@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" + integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/salsa20@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + resolved "https://registry.yarnpkg.com/@stablelib/salsa20/-/salsa20-1.0.2.tgz#95177331f89a59d1c90f153f53265c925d4de138" + integrity sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= +"@stablelib/sha512@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" + integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= +"@stablelib/wipe@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" + integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= +"@stablelib/x25519@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" + integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== + dependencies: + "@stablelib/keyagreement" "^1.0.1" + "@stablelib/random" "^1.0.2" + "@stablelib/wipe" "^1.0.1" -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@stablelib/xsalsa20@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/xsalsa20/-/xsalsa20-1.0.2.tgz#89efc22a7ba432880ef11d876fdeba13529ccdc4" + integrity sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/salsa20" "^1.0.2" + "@stablelib/wipe" "^1.0.1" -"@sindresorhus/is@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" - integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== +"@supercharge/promise-pool@^2.1.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" + integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== -"@szmarczak/http-timer@^4.0.0": +"@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" -"@types/bn.js@^4.11.6": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@taquito/http-utils@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/http-utils/-/http-utils-13.0.1.tgz#b682b7161ce8011afdea1b06750ad21e15916c63" + integrity sha512-eHzd0HSL3qX6bOOSaQClm+0XmpbSNcJP69uzaBJwfXo7ntQR1bUfGLn6+1Hgsk/lJ0JxakD2PDA4aaeajHvyPw== + dependencies: + axios "^0.26.0" + +"@taquito/local-forging@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/local-forging/-/local-forging-13.0.1.tgz#b87d7d478457d32338cc8e5eeeca072518241595" + integrity sha512-2n1ryUzHBIOHiQYRO7ELQaurjoNhJ3KUUcX0dAnFs3xVxUBugHgDPot+T+1rNZDdLVhTS6mmK796xrWDGnO6xw== + dependencies: + "@taquito/utils" "^13.0.1" + bignumber.js "^9.0.2" + +"@taquito/michel-codec@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/michel-codec/-/michel-codec-13.0.1.tgz#cfadbd5886724b861d82f75b6f679104573dc7bb" + integrity sha512-A9MxhDMdTTK31ty5Ke2wg4wkt7F/Y++tD8wq9YIFJzxt+MkpWX5b2i1f7yHXPsK/81YiGAi/LDamLtLCekY1LA== + +"@taquito/michelson-encoder@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/michelson-encoder/-/michelson-encoder-13.0.1.tgz#75c4650fe5839a64e42d1aac23997402c83a6ac6" + integrity sha512-U80vswMHlEDQUjvARZScIKrSZkIjxdYtDLvHu4oRZ9wTqTXSlj+t64G5QmZwTEJRQkbzfhsOOr6vL40ztL0tzw== + dependencies: + "@taquito/rpc" "^13.0.1" + "@taquito/utils" "^13.0.1" + bignumber.js "^9.0.2" + fast-json-stable-stringify "^2.1.0" + +"@taquito/rpc@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/rpc/-/rpc-13.0.1.tgz#bf1ad8347f9942e37af90d11ae29bd8d938f904d" + integrity sha512-f2Z0qzHB1ERLU5kewmXh3rAD84qIYthSjmAo04sWFbuaMgGW1HxMJKJ/EtL4s4VgoDUwahSwfATmVzmKg57BSw== + dependencies: + "@taquito/http-utils" "^13.0.1" + "@taquito/utils" "^13.0.1" + bignumber.js "^9.0.2" + +"@taquito/signer@^13.0.0": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/signer/-/signer-13.0.1.tgz#1b725e8438b9a383a81cc7d2fb4ea5c8ecc4f0aa" + integrity sha512-3C7DTC5u6jqA83kUGghEDEDJtwCNNmw0KIF+u6EdQ55YRxLDf8XBp8/voG3i+0HvU3MPqfg0CIvCUHbr8MO0Og== + dependencies: + "@stablelib/blake2b" "^1.0.1" + "@stablelib/ed25519" "^1.0.2" + "@stablelib/nacl" "^1.0.3" + "@taquito/taquito" "^13.0.1" + "@taquito/utils" "^13.0.1" + elliptic "^6.5.4" + pbkdf2 "^3.1.2" + typedarray-to-buffer "^4.0.0" + +"@taquito/taquito@^13.0.0", "@taquito/taquito@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/taquito/-/taquito-13.0.1.tgz#806812b6853db555fcd614048ba36db4d14d8a57" + integrity sha512-xNtcwKsOCHSkURO9G2VhKSeI9q0qh5/OkVuYe6KM0Fo40FthXNqq205I/FTJzu5E1Q73J7cFqA7FHqUrv276gw== + dependencies: + "@taquito/http-utils" "^13.0.1" + "@taquito/local-forging" "^13.0.1" + "@taquito/michel-codec" "^13.0.1" + "@taquito/michelson-encoder" "^13.0.1" + "@taquito/rpc" "^13.0.1" + "@taquito/utils" "^13.0.1" + bignumber.js "^9.0.2" + rxjs "^6.6.3" + +"@taquito/tzip12@^13.0.0": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/tzip12/-/tzip12-13.0.1.tgz#1b5207d1f68bd8c84a8f7a6ad6e94f2f9dc606e9" + integrity sha512-V3TPKL7sh5rj75NXjgNWCgM245LX2U/vQXA+rKebNKmHqNPcYZ7L5EmOzE5eLURkoxsuwLznCGhcL/xWQdMraA== + dependencies: + "@taquito/michelson-encoder" "^13.0.1" + "@taquito/taquito" "^13.0.1" + "@taquito/tzip16" "^13.0.1" + +"@taquito/tzip16@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/tzip16/-/tzip16-13.0.1.tgz#3c476b15d1c81e4cc89d88c76eee9601e5bd7b49" + integrity sha512-k+Vr1t2j7IqR/FuK5b3e7iGTA/VfltBwH+fdJEXssRjBH3jrWQxraR+CNkNuqkspn97dKe7TwwU4cJnqbh1sLA== + dependencies: + "@taquito/http-utils" "^13.0.1" + "@taquito/michelson-encoder" "^13.0.1" + "@taquito/rpc" "^13.0.1" + "@taquito/taquito" "^13.0.1" + "@taquito/utils" "^13.0.1" + bignumber.js "^9.0.2" + crypto-js "^4.1.1" + +"@taquito/utils@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@taquito/utils/-/utils-13.0.1.tgz#24a1c7d7e62043fc7dcba2838b391b28aea2992e" + integrity sha512-uRtsl4EATlVJ1UnNUiAEoibFFyexGLDLz02CBHoBrcWjqrZdj3AxA+TO63E2kWn/JmT2FM0Sqaqbm555lj4tow== + dependencies: + "@stablelib/blake2b" "^1.0.1" + "@stablelib/ed25519" "^1.0.2" + "@types/bs58check" "^2.1.0" + blakejs "^1.2.1" + bs58check "^2.1.2" + buffer "^6.0.3" + elliptic "^6.5.4" + typedarray-to-buffer "^4.0.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/axios@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" + integrity sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ== + dependencies: + axios "*" + +"@types/bn.js@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + +"@types/bs58check@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/bs58check/-/bs58check-2.1.0.tgz#7d25a8b88fe7a9e315d2647335ee3c43c8fdb0c0" + integrity sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ== dependencies: "@types/node" "*" -"@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" - "@types/keyv" "*" + "@types/keyv" "^3.1.4" "@types/node" "*" - "@types/responselike" "*" + "@types/responselike" "^1.0.0" -"@types/component-emitter@^1.2.10": - version "1.2.10" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" - integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" -"@types/cookie@^0.4.0": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@types/chai@*", "@types/chai@^4.3.1": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== -"@types/cors@^2.8.10": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== +"@types/connect@^3.4.33": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/find-cache-dir@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz#7b959a4b9643a1e6a1a5fe49032693cc36773501" + integrity sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw== -"@types/google-protobuf@^3.15.4": - version "3.15.5" - resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.5.tgz#644b2be0f5613b1f822c70c73c6b0e0b5b5fa2ad" - integrity sha512-6bgv24B+A2bo9AfzReeg5StdiijKzwwnRflA8RLd1V4Yv995LeTmo0z69/MPbBDFSiZWdZHQygLo/ccXhMEDgw== +"@types/fs-extra@^9.0.13": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" "@types/http-cache-semantics@*": version "4.0.1" @@ -1244,186 +2189,434 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/json-schema@^7.0.7": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/keyv@*", "@types/keyv@^3.1.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" - integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + +"@types/lodash-es@^4.17.6": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.191" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + "@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/node-fetch@^2.5.12": - version "2.5.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" - integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== dependencies: - "@types/node" "*" - form-data "^3.0.0" + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/node@*", "@types/node@>= 8": - version "16.3.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" - integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^18.7.13": + version "18.14.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.0.tgz#94c47b9217bbac49d4a67a967fdcdeed89ebb7d0" + integrity sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A== + +"@types/node@10.12.18": + version "10.12.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" + integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== "@types/node@11.11.6": version "11.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== -"@types/node@>=10.0.0": - version "16.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" - integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== +"@types/node@^10.3.2": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.54", "@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^13.7.0": version "13.13.52" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== -"@types/responselike@*": +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== dependencies: "@types/node" "*" -"@types/websocket@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.3.tgz#49e09f939afd0ccdee4f7108d4712ec9feb0f153" - integrity sha512-ZdoTSwmDsKR7l1I8fpfQtmTI/hUwlOvE3q0iyJsp4tXU0MkdrYowimDzwxjhQvxU4qjhHLd3a6ig0OXRbLgIdw== +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" -"@typescript-eslint/experimental-utils@^4.9.1": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca" - integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw== +"@types/yarnpkg__lockfile@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@types/yarnpkg__lockfile/-/yarnpkg__lockfile-1.1.5.tgz#9639020e1fb65120a2f4387db8f1e8b63efdf229" + integrity sha512-8NYnGOctzsI4W0ApsP/BIHD/LnxpJ6XaGf2AZmz4EyDYJMxtprN4279dLNI1CPZcwC9H18qYcaFv4bXi0wmokg== + +"@typescript-eslint/eslint-plugin@^4.31.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.9.1": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.3" - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/typescript-estree" "4.28.3" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44" - integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ== + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== dependencies: - "@typescript-eslint/scope-manager" "4.28.3" - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/typescript-estree" "4.28.3" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371" - integrity sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ== +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== dependencies: - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/visitor-keys" "4.28.3" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/types@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" - integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/typescript-estree@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" - integrity sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w== +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== dependencies: - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/visitor-keys" "4.28.3" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" debug "^4.3.1" globby "^11.0.3" is-glob "^4.0.1" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" - integrity sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg== +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== dependencies: - "@typescript-eslint/types" "4.28.3" + "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@walletconnect/browser-utils@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.4.1.tgz#a8d5a038d28c19b739eb0ff4194ced140c922d36" - integrity sha512-ONrkPSI/27o1Wj8kUwE0uUZFk0GDCDQBJy614GsrhcwuQwJEW/B+nXPQ+Ca/4WvQySM5hWVHp1gO1kozSUkh3A== +"@unimodules/core@*": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-7.1.2.tgz#5181b99586476a5d87afd0958f26a04714c47fa1" + integrity sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg== + dependencies: + compare-versions "^3.4.0" + +"@unimodules/react-native-adapter@*": + version "6.3.9" + resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz#2f4bef6b7532dce5bf9f236e69f96403d0243c30" + integrity sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw== + dependencies: + expo-modules-autolinking "^0.0.3" + invariant "^2.2.4" + +"@vechain/connex-driver@^2.0.8": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@vechain/connex-driver/-/connex-driver-2.0.12.tgz#70a4adfaf9860db1b3f1fc9074a6553ea344ffda" + integrity sha512-KdlpCIuFPqnOSlJGc2tnqZDC62WypSjFFj0m/wH6bkOSPKugmy5wapQfhoMs0iR8EvO8xpXzg1jDcVapN7vgXQ== + dependencies: + "@vechain/connex-types" "^2.0.12" + axios "^0.21.1" + bignumber.js "^7.2.1" + isomorphic-ws "^4.0.1" + lru-cache "^5.1.1" + thor-devkit "^2.0.5" + ws "^7.1.0" + +"@vechain/connex-framework@^2.0.8": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@vechain/connex-framework/-/connex-framework-2.0.12.tgz#3f759b2806dd396f6e5d29a5eb75d72804bb8eff" + integrity sha512-IwPBPHv9utWqUQc5nc2uEkQqMls6Gc1qX/4tVM1VNsc0r/MQZBZGyxJLFSIpcGumEploesZO0s3x7+zRicn7og== + dependencies: + "@vechain/connex-types" "^2.0.12" + bignumber.js "^7.2.1" + thor-devkit "^2.0.5" + validator-ts "^0.9.1" + +"@vechain/connex-types@^2.0.12", "@vechain/connex-types@^2.0.2": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@vechain/connex-types/-/connex-types-2.0.12.tgz#d89d50668f59f6c0239c94d9358c1443bc07f83e" + integrity sha512-FZLvB48U53FyL0cmDIh+eKqn6pNOjoUmp57qtMK8hDXi+hT+x6ZMEJbpmNhtcR7RrQoXqlx5/HFPOC6mVR+1Qg== + +"@vechain/ethers@^4.0.27-5": + version "4.0.27-5" + resolved "https://registry.yarnpkg.com/@vechain/ethers/-/ethers-4.0.27-5.tgz#2e7d40294b2e14ddf4cf6f6094bbdc871e26e299" + integrity sha512-dR+rTUauPJpqHNBdEgV6Xh+o009uCRPCvN2HWYIAzZP2SvgsPHLxNUzeRbRKhNzz/HC8HjWNvECRxODF88B03Q== + dependencies: + "@types/node" "^10.3.2" + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +"@wallet-standard/base@^1.0.0", "@wallet-standard/base@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.0.1.tgz#860dd94d47c9e3c5c43b79d91c6afdbd7a36264e" + integrity sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w== + +"@wallet-standard/features@^1.0.0", "@wallet-standard/features@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.0.1.tgz#9aab662ebc5394ec2463e5c8f67b8bbf30fef1b2" + integrity sha512-B/WzRpoEiGQ+kwL/AuzqzNjrGvdL5J2OXiXHkDGONsNbKdtTpExU+ttZKQwSP/EvPl8+ZZ/4OO/Bz4YkigtQDg== + dependencies: + "@wallet-standard/base" "^1.0.1" + +"@walletconnect/browser-utils@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz#33c10e777aa6be86c713095b5206d63d32df0951" + integrity sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A== dependencies: - "@walletconnect/types" "^1.4.1" + "@walletconnect/safe-json" "1.0.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/window-getters" "1.0.0" + "@walletconnect/window-metadata" "1.0.0" detect-browser "5.2.0" - safe-json-utils "1.0.0" - window-getters "1.0.0" - window-metadata "1.0.0" -"@walletconnect/client@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.4.1.tgz#c9c50df5afde23a35e23d96fe6d207c102e53850" - integrity sha512-JRW+9+j9LwszY76/WcIumEiLmhX7eidorH9SFFmI2pFfbrhB6KLe87FaA106kxwZUyWKOLZ6jVV4d1urYSdEwA== +"@walletconnect/client@1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.6.5.tgz#6616ae926abc7c87c48a2d3693f2eb697858e685" + integrity sha512-dRq1D3NEGwM2I3CpiwFsWy1rrdMKCMSfDUu3rCCXUE4zInx+pyq7IEFjYiSjtOEZzjRlUTqYwhjnYIezQZgh4w== dependencies: - "@walletconnect/core" "^1.4.1" - "@walletconnect/iso-crypto" "^1.4.1" - "@walletconnect/types" "^1.4.1" - "@walletconnect/utils" "^1.4.1" + "@walletconnect/core" "^1.6.5" + "@walletconnect/iso-crypto" "^1.6.5" + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" -"@walletconnect/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.4.1.tgz#68310ee7c9737a7a0a7f1308abbfc1c31212b9a6" - integrity sha512-NzWvhk4akI2uhORUxMDMS/8yAdfp+nzvb5QdTE0eTD0WOrK16qAfYLSU/IjFc2J2lqhuPVxfO2XV7QoxgCXfwA== +"@walletconnect/client@^1.7.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.8.0.tgz#6f46b5499c7c861c651ff1ebe5da5b66225ca696" + integrity sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ== dependencies: - "@walletconnect/socket-transport" "^1.4.1" - "@walletconnect/types" "^1.4.1" - "@walletconnect/utils" "^1.4.1" + "@walletconnect/core" "^1.8.0" + "@walletconnect/iso-crypto" "^1.8.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" -"@walletconnect/iso-crypto@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.4.1.tgz#0d9793c679d6c5443c49cce83f5d8dd476a65df2" - integrity sha512-rzfqM/DFhzNxBriMCU4DOarPkH+Brgll+2a2YeO6zHgMlwZtBKi5mMgzBwbDC3XygOvKbcRTB9G9hr8uYn+i5g== +"@walletconnect/core@^1.6.5", "@walletconnect/core@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.8.0.tgz#6b2748b90c999d9d6a70e52e26a8d5e8bfeaa81e" + integrity sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw== dependencies: - "@pedrouid/iso-crypto" "^1.0.0" - "@walletconnect/types" "^1.4.1" - "@walletconnect/utils" "^1.4.1" + "@walletconnect/socket-transport" "^1.8.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" -"@walletconnect/socket-transport@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.4.1.tgz#d9b7ebb9a2843cc44cf96c880c62be78d4a1625f" - integrity sha512-/5Mhu4bu3tS52LqTlmmjx5x/N89XqbuT0YMobvQ+k/m+VqSeBDntqIjwBt7XiFlCbrUTq3/yTajavGFxWFB6pA== +"@walletconnect/crypto@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.3.tgz#7b8dd4d7e2884fe3543c7c07aea425eef5ef9dd4" + integrity sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g== dependencies: - "@walletconnect/types" "^1.4.1" - "@walletconnect/utils" "^1.4.1" - ws "7.3.0" + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/environment" "^1.0.1" + "@walletconnect/randombytes" "^1.0.3" + aes-js "^3.1.2" + hash.js "^1.1.7" + tslib "1.14.1" -"@walletconnect/types@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.4.1.tgz#48297238b86f846b8c694504ca45f0059a2cca88" - integrity sha512-lzS9NbXjVb5N+W/UnCZAflxjLtYepUi4ev1IeFozSvr/cWxAhEe/sjixe7WEIpYklW27kfBhKccMH/KjUoRC7w== +"@walletconnect/encoding@^1.0.1", "@walletconnect/encoding@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.2.tgz#cb3942ad038d6a6bf01158f66773062dd25724da" + integrity sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag== + dependencies: + is-typedarray "1.0.0" + tslib "1.14.1" + typedarray-to-buffer "3.1.5" -"@walletconnect/utils@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.4.1.tgz#86108470c211a02609274a6c7bbd516c5182a22e" - integrity sha512-JrVjcXmWVcU02fmVNZFBpJ48f84qyar24CF7szGv+k9ZxvU9J7XkM+Fic4790Dt3DaWhOzS9/eBUa+BEZcBbNw== +"@walletconnect/environment@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" + integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== + dependencies: + tslib "1.14.1" + +"@walletconnect/iso-crypto@^1.6.5", "@walletconnect/iso-crypto@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.8.0.tgz#44ddf337c4f02837c062dbe33fa7ab36789df451" + integrity sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ== + dependencies: + "@walletconnect/crypto" "^1.0.2" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + +"@walletconnect/jsonrpc-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.2.tgz#b79519f679cd6a5fa4a1bea888f27c1916689a20" + integrity sha512-CZe8tjJX73OWdHjrBHy7HtAapJ2tT0Q3TYhPBhRxi3643lwPIQWC9En45ldY14TZwgSewkbZ0FtGBZK0G7Bbyg== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/jsonrpc-utils@^1.0.3": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.5.tgz#b21f0349d366c5226f4bcdea27ba4d213097fc67" + integrity sha512-4xdaegX9K6rEdguqCLvudYq2h0KCeTYWnWwNNMhooWnkilT7PrR1kmatpr/HP4l191zyvS33K5VClWhkCTeAxQ== + dependencies: + "@walletconnect/environment" "^1.0.1" + "@walletconnect/jsonrpc-types" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/randombytes@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.3.tgz#e795e4918367fd1e6a2215e075e64ab93e23985b" + integrity sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw== dependencies: - "@json-rpc-tools/utils" "1.6.1" - "@walletconnect/browser-utils" "^1.4.1" - "@walletconnect/types" "^1.4.1" + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/environment" "^1.0.1" + randombytes "^2.1.0" + tslib "1.14.1" + +"@walletconnect/safe-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" + integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== + +"@walletconnect/socket-transport@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.8.0.tgz#9a1128a249628a0be11a0979b522fe82b44afa1b" + integrity sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ== + dependencies: + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + ws "7.5.3" + +"@walletconnect/types@^1.6.5", "@walletconnect/types@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.8.0.tgz#3f5e85b2d6b149337f727ab8a71b8471d8d9a195" + integrity sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg== + +"@walletconnect/utils@^1.6.5", "@walletconnect/utils@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.8.0.tgz#2591a197c1fa7429941fe428876088fda6632060" + integrity sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA== + dependencies: + "@walletconnect/browser-utils" "^1.8.0" + "@walletconnect/encoding" "^1.0.1" + "@walletconnect/jsonrpc-utils" "^1.0.3" + "@walletconnect/types" "^1.8.0" bn.js "4.11.8" - enc-utils "3.0.0" js-sha3 "0.8.0" query-string "6.13.5" +"@walletconnect/window-getters@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" + integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== + +"@walletconnect/window-getters@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" + integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== + dependencies: + tslib "1.14.1" + +"@walletconnect/window-metadata@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" + integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== + dependencies: + "@walletconnect/window-getters" "^1.0.0" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abort-controller@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1431,35 +2624,59 @@ abort-controller@3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@~1.3.4: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +abortcontroller-polyfill@^1.7.3: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== aes-js@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1470,41 +2687,59 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.0.1: - version "8.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.1.tgz#ae65764bf1edde8cd861281cda5057852364a295" - integrity sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" +algo-msgpack-with-bigint@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" + integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== + +algosdk@^1.13.1, algosdk@^1.15.0-beta.1: + version "1.24.1" + resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-1.24.1.tgz#afc4102457ae0c38a32de6b84f4d713aedfc9e89" + integrity sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww== + dependencies: + algo-msgpack-with-bigint "^2.1.1" + buffer "^6.0.2" + cross-fetch "^3.1.5" + hi-base32 "^0.5.1" + js-sha256 "^0.9.0" + js-sha3 "^0.8.0" + js-sha512 "^0.8.0" + json-bigint "^1.0.0" + tweetnacl "^1.0.3" + vlq "^2.0.4" + ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1518,10 +2753,15 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansicolors@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1531,14 +2771,64 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +aptos@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aptos/-/aptos-1.6.0.tgz#177fad94667503df0b911a5ea7b8e542b612be8b" + integrity sha512-5khjDwrDeNMDBFRcZAmETW20D+V2AqTdsgqkh6bvvl70BtRXdkitN0saM05gf1rK3atnO9PyUKO8iRaBDG5qtA== + dependencies: + "@noble/hashes" "1.1.3" + "@scure/bip39" "1.1.0" + axios "0.27.2" + form-data "4.0.0" + tweetnacl "1.0.3" + +arbundles@^0.6.21: + version "0.6.22" + resolved "https://registry.yarnpkg.com/arbundles/-/arbundles-0.6.22.tgz#0fd58ec76514f1d6c2db7c5870a6232314f52de6" + integrity sha512-QlSavBHk59mNqgQ6ScxlqaBJlDbSmSrK/uTcF3HojLAZ/4aufTkVTBjl1hSfZ/ZN45oIPgJC05R8SmVARF+8VA== + dependencies: + "@noble/ed25519" "^1.6.1" + "@randlabs/myalgo-connect" "^1.1.2" + "@solana/wallet-adapter-base" "^0.9.2" + algosdk "^1.13.1" + arweave "^1.11.4" + arweave-stream-tx "^1.1.0" + avsc "https://github.com/Bundlr-Network/avsc#csp-fixes" + axios "^0.21.3" + base64url "^3.0.1" + bs58 "^4.0.1" + ethers "^5.5.1" + keccak "^3.0.2" + multistream "^4.1.0" + process "^0.11.10" + secp256k1 "^4.0.2" + tmp-promise "^3.0.2" + +arconnect@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/arconnect/-/arconnect-0.4.2.tgz#83de7638fb46183e82d7ec7efb5594c5f7cdc806" + integrity sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw== + dependencies: + arweave "^1.10.13" + are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1546,20 +2836,98 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +arweave-stream-tx@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz#2d5c66554301baacd02586a152fbb198b422112f" + integrity sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ== + dependencies: + exponential-backoff "^3.1.0" + +arweave@^1.10.13, arweave@^1.11.4: + version "1.13.0" + resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.13.0.tgz#046d1b74efe5b157ad85279473f3729e8c7a47a9" + integrity sha512-pir1s0Lg7MzAxmFsPqht1SGOq8Hoj1fhf44/8PVjBd6T8l6JRrFN23UvKp7N+MXBYM5SqrLYB8KrgvxAaczGFg== + dependencies: + arconnect "^0.4.2" + asn1.js "^5.4.1" + base64-js "^1.5.1" + bignumber.js "^9.0.2" + +asmcrypto.js@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz#38fc1440884d802c7bd37d1d23c2b26a5cd5d2d2" + integrity sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA== + +asn1.js@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +asn1js@^3.0.1, asn1js@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" + integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== + dependencies: + pvtsutils "^1.3.2" + pvutils "^1.1.3" + tslib "^2.4.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assert@^2.0.0: version "2.0.0" @@ -1571,109 +2939,256 @@ assert@^2.0.0: object-is "^1.0.1" util "^0.12.0" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -available-typed-arrays@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9" - integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@0.21.1, axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +"avsc@https://github.com/Bundlr-Network/avsc#csp-fixes": + version "5.4.7" + resolved "https://github.com/Bundlr-Network/avsc#a730cc8018b79e114b6a3381bbb57760a24c6cef" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +axios@*: + version "1.3.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.3.tgz#e7011384ba839b885007c9c9fae1ff23dceb295b" + integrity sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -backo2@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= +axios@0.24.0, axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +axios@0.27.2, axios@^0.27.0, axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axios@^0.21.1, axios@^0.21.3: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +axios@^0.26.0, axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + +axios@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" + integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +b64-lite@^1.3.1, b64-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/b64-lite/-/b64-lite-1.4.0.tgz#e62442de11f1f21c60e38b74f111ac0242283d3d" + integrity sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w== + dependencies: + base-64 "^0.1.0" + +b64u-lite@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/b64u-lite/-/b64u-lite-1.1.0.tgz#a581b7df94cbd4bed7cbb19feae816654f0b1bf0" + integrity sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A== + dependencies: + b64-lite "^1.4.0" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" backslash@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/backslash/-/backslash-0.2.0.tgz#6c3c1fce7e7e714ccfc10fd74f0f73410677375f" - integrity sha1-bDwfzn5+cUzPwQ/XTw9zQQZ3N18= + integrity sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A== balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" - integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== +base-64@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" -base64-arraybuffer@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" - integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -base64-js@^1.3.1, base64-js@^1.5.1: +base64-arraybuffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" + integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== + +base64-js@*, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +bash-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bash-glob/-/bash-glob-2.0.0.tgz#a8ef19450783403ed93fccca2dbe09f2cf6320dc" + integrity sha512-53/NJ+t2UAkEYgQPO6aFjbx1Ue8vNNXCYaA4EljNKP1SR8A9dSQQoBmYWR8BLXO0/NDRJEMSJ4BxWihi//m3Kw== + dependencies: + bash-path "^1.0.1" + component-emitter "^1.2.1" + cross-spawn "^5.1.0" + each-parallel-async "^1.0.0" + extend-shallow "^2.0.1" + is-extglob "^2.1.1" + is-glob "^4.0.0" + +bash-path@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bash-path/-/bash-path-1.0.3.tgz#dbc9efbdf18b1c11413dcb59b960e6aa56c84258" + integrity sha512-mGrYvOa6yTY/qNCiZkPFJqWmODK68y6kmVRAJ1NNbWlNoJrUrsFxu7FU2EKg7gbrer6ttrKkF2s/E/lhRy7/OA== + dependencies: + arr-union "^3.1.0" + is-windows "^1.0.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" -bech32@1.1.4: +bech32@1.1.4, bech32@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -before-after-hook@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== +bech32@2.0.0, bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== -big-integer@^1.6.17: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bignumber.js@9.0.1, bignumber.js@^9.0.0, bignumber.js@^9.0.1: +big-integer@1.6.51: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + +bigint-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" + integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== + dependencies: + bindings "^1.3.0" + +bignumber.js@9.0.1, bignumber.js@=9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== +bignumber.js@9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + +bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.0.2, bignumber.js@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bindings@^1.4.0, bindings@^1.5.0: +bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== @@ -1683,7 +3198,28 @@ bindings@^1.4.0, bindings@^1.5.0: bip32-path@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/bip32-path/-/bip32-path-0.4.2.tgz#5db0416ad6822712f077836e2557b8697c0c7c99" - integrity sha1-XbBBataCJxLwd4NuJVe4aXwMfJk= + integrity sha512-ZBMCELjJfcNMkz5bDuJ1WrYvjlhEF5k6mQ8vUr4N7MbVRsXei7ZOg8VhhwMfNiW68NWmLkgkc6WvTickrLGprQ== + +bip32@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134" + integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA== + dependencies: + "@types/node" "10.12.18" + bs58check "^2.1.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + tiny-secp256k1 "^1.1.3" + typeforce "^1.11.5" + wif "^2.0.6" + +bip39-light@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/bip39-light/-/bip39-light-1.0.7.tgz#06a72f251b89389a136d3f177f29b03342adc5ba" + integrity sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" bip39@3.0.2: version "3.0.2" @@ -1695,7 +3231,17 @@ bip39@3.0.2: pbkdf2 "^3.0.9" randombytes "^2.0.1" -bl@^4.0.3: +bip39@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" + integrity sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -1719,26 +3265,95 @@ blake2b@2.1.3: blake2b-wasm "^1.1.0" nanoassert "^1.0.0" -blakejs@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" - integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== +blakejs@^1.1.0, blakejs@^1.1.2, blakejs@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@3.7.2, bluebird@^3.5.0, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@4.11.8: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bn.js@^4.11.9: +bn.js@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5" + integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA== + +bn.js@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +bn.js@^4.0.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== +body-parser@1.20.1, body-parser@^1.16.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +borc@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19" + integrity sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w== + dependencies: + bignumber.js "^9.0.0" + buffer "^5.5.0" + commander "^2.15.0" + ieee754 "^1.1.13" + iso-url "~0.4.7" + json-text-sequence "~0.1.0" + readable-stream "^3.6.0" + +borsh@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" + integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1747,7 +3362,14 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1757,19 +3379,85 @@ braces@^3.0.1, braces@~3.0.2: brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= +browser-headers@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/browser-headers/-/browser-headers-0.4.1.tgz#4308a7ad3b240f4203dbb45acedb38dc2d65dd02" + integrity sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" -buffer@^5.5.0: +buffer-layout@^1.2.0, buffer-layout@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" + integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== + +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" + integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@6.0.3, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -1777,27 +3465,29 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= - bufferutil@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" -cacheable-lookup@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" - integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== - dependencies: - "@types/keyv" "^3.1.1" - keyv "^4.0.0" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== -cacheable-request@^7.0.1: +cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== @@ -1828,12 +3518,35 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= +capability@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" + integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catharsis@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" + integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== dependencies: - traverse ">=0.3.0 <0.4" + lodash "^4.17.15" + +chai@^4.3.6: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" chalk@^2.0.0: version "2.4.2" @@ -1844,23 +3557,51 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@^3.0.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -1872,12 +3613,23 @@ chokidar@^3.0.0: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: +chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -cipher-base@^1.0.1, cipher-base@^1.0.3: +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== @@ -1885,6 +3637,28 @@ cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -1904,16 +3678,21 @@ cliui@^7.0.2: wrap-ansi "^7.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== color-convert@^1.9.0: version "1.9.3" @@ -1932,31 +3711,61 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@^1.4.0: +colors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" +commander@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" + integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== + +commander@^2.11.0, commander@^2.15.0, commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -component-emitter@~1.3.0: +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +compare-versions@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -1964,24 +3773,60 @@ component-emitter@~1.3.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" -core-util-is@~1.0.0: +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -cors@~2.8.5: +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -1989,6 +3834,16 @@ cors@~2.8.5: object-assign "^4" vary "^1" +crc-32@^1.2.0, crc-32@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/crc/-/crc-4.3.2.tgz#49b7821cbf2cf61dfd079ed93863bbebd5469b9a" + integrity sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A== + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2000,7 +3855,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@1.1.7, create-hmac@^1.1.4: +create-hmac@1.1.7, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2012,18 +3867,28 @@ create-hmac@1.1.7, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^3.1.4, cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" + lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2035,12 +3900,58 @@ cross-spawn@^7.0.2: crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== -cuint@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" - integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= +"crypto-exchange-rate@git+https://github.com/xp-network/exchange-rate#aedf7b2c152d6d25e9e6cec5d222c63a3ade18ab": + version "1.0.0" + resolved "git+https://github.com/xp-network/exchange-rate#aedf7b2c152d6d25e9e6cec5d222c63a3ade18ab" + dependencies: + axios "^0.21.1" + +crypto-hash@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" + integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== + +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +csv-generate@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-4.2.2.tgz#b0ae1dca9f608fb8dfbb9df32949652d8f583ade" + integrity sha512-Ah/NcMxHMqwQsuL173yp8EOzHrbLh8iyScqTy990b+TJZNjHhy7gs5FfSmyQ2arLC2QVrueO3DYJVQnibJB3WQ== + +csv-parse@^5.3.5: + version "5.3.5" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.3.5.tgz#9924bbba9f7056122f06b7af18edc1a7f022ce99" + integrity sha512-8O5KTIRtwmtD3+EVfW6BCgbwZqJbhTYsQZry12F1TP5RUp0sD9tp1UnCWic3n0mLOhzeocYaCZNYxOGSg3dmmQ== + +csv-stringify@^6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.2.4.tgz#9ae7a660b771e55c09d6cf4cf936fbbdf9499962" + integrity sha512-RVzGaBeHl0IspzOSiNr1e7XDM7ajuESlqetQbxH2pBPplIWycx0gAVclxNEa4lc91brK6LIE0PrdEoHtZYIHIQ== + +csv@^6.0.5: + version "6.2.7" + resolved "https://registry.yarnpkg.com/csv/-/csv-6.2.7.tgz#29f09bcf5929ab3eaa71f5f74a5ed7d122c195f5" + integrity sha512-W9rB5/QWqXg2rQcAOT7lDHfxhDavg1BEmy+WaxKRYowzK9Dq+7WHIJo/8Xvry7rtaWQTMgl0wkS/cfd1k9cQUg== + dependencies: + csv-generate "^4.2.2" + csv-parse "^5.3.5" + csv-stringify "^6.2.4" + stream-transform "^3.2.2" + +curve25519-js@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/curve25519-js/-/curve25519-js-0.0.4.tgz#e6ad967e8cd284590d657bbfc90d8b50e49ba060" + integrity sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w== d@1, d@^1.0.1: version "1.0.1" @@ -2050,29 +3961,48 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -debug@^2.2.0: +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dataloader@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" + integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== + +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" decompress-response@^4.2.0: version "4.2.1" @@ -2081,55 +4011,95 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" -decompress-response@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" - integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: - mimic-response "^2.0.0" + mimic-response "^3.1.0" + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== -defer-to-connect@^2.0.0: +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: - object-keys "^1.0.12" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +delimit-stream@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b" + integrity sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ== + +depd@2.0.0, depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-browser@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" @@ -2138,7 +4108,12 @@ detect-browser@5.2.0: detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" @@ -2154,17 +4129,41 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: - readable-stream "^2.0.2" + no-case "^3.0.4" + tslib "^2.0.3" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +dotenv@^16.0.0: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +each-parallel-async@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/each-parallel-async/-/each-parallel-async-1.0.0.tgz#91783e190000c7dd588336b2d468ebaf71980f7b" + integrity sha512-P/9kLQiQj0vZNzphvKKTgRgMnlqs5cJsxeAiuog1jrUnwv0Z3hVUwJDQiP7MnLb2I9S15nR9SRUceFT9IxtqRg== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" ed25519-hd-key@1.1.2: version "1.1.2" @@ -2175,14 +4174,12 @@ ed25519-hd-key@1.1.2: create-hmac "1.1.7" tweetnacl "1.0.3" -ed2curve@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" - integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== - dependencies: - tweetnacl "1.x.x" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -elliptic@6.5.4, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -2195,23 +4192,15 @@ elliptic@6.5.4, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enc-utils@3.0.0, enc-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/enc-utils/-/enc-utils-3.0.0.tgz#65935d2d6a867fa0ae995f05f3a2f055ce764dcf" - integrity sha512-e57t/Z2HzWOLwOp7DZcV0VMEY8t7ptWwsxyp6kM2b2zrk6JqIpXxzkruHAMiBsy5wg9jp/183GdiRXCvBtzsYg== - dependencies: - is-typedarray "1.0.0" - typedarray-to-buffer "3.1.5" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" @@ -2220,69 +4209,102 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -engine.io-client@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.1.2.tgz#27108da9b39ae03262443d945caf2caa3655c4cb" - integrity sha512-blRrgXIE0A/eurWXRzvfCLG7uUFJqfTGFsyJzXSK71srMMGJ2VraBLg8Mdw28uUxSpVicepBN9X7asqpD1mZcQ== +engine.io-client@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.4.0.tgz#88cd3082609ca86d7d3c12f0e746d12db4f47c91" + integrity sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g== dependencies: - base64-arraybuffer "0.1.4" - component-emitter "~1.3.0" + "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" - engine.io-parser "~4.0.1" - has-cors "1.1.0" - parseqs "0.0.6" - parseuri "0.0.6" - ws "~7.4.2" - yeast "0.1.2" - -engine.io-parser@~4.0.0, engine.io-parser@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" - integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== - dependencies: - base64-arraybuffer "0.1.4" + engine.io-parser "~5.0.3" + ws "~8.11.0" + xmlhttprequest-ssl "~2.0.0" -engine.io@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-5.1.1.tgz#a1f97e51ddf10cbd4db8b5ff4b165aad3760cdd3" - integrity sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~4.0.0" - ws "~7.4.2" +engine.io-parser@~5.0.3: + version "5.0.6" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45" + integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw== enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: - ansi-colors "^4.1.1" + ansi-colors "^4.1.1" + +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +eol@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" + integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== + +error-polyfill@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" + integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== + dependencies: + capability "^0.2.5" + o3 "^1.0.3" + u3 "^0.1.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== dependencies: + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" @@ -2294,18 +4316,18 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" @@ -2314,9 +4336,21 @@ es6-iterator@~2.0.3: es6-object-assign@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + +es6-promise@^4.0.3, es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -2324,30 +4358,188 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +esbuild-android-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" + integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== + +esbuild-android-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" + integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== + +esbuild-darwin-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" + integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== + +esbuild-darwin-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" + integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== + +esbuild-freebsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" + integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== + +esbuild-freebsd-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" + integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== + +esbuild-linux-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" + integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== + +esbuild-linux-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" + integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== + +esbuild-linux-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" + integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== + +esbuild-linux-arm@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" + integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== + +esbuild-linux-mips64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" + integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== + +esbuild-linux-ppc64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" + integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== + +esbuild-linux-riscv64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" + integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== + +esbuild-linux-s390x@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" + integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== + +esbuild-netbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" + integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== + +esbuild-openbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" + integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== + +esbuild-sunos-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" + integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== + +esbuild-windows-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" + integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== + +esbuild-windows-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" + integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== + +esbuild-windows-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" + integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== + +esbuild@^0.15.9: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" + integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== + optionalDependencies: + "@esbuild/android-arm" "0.15.18" + "@esbuild/linux-loong64" "0.15.18" + esbuild-android-64 "0.15.18" + esbuild-android-arm64 "0.15.18" + esbuild-darwin-64 "0.15.18" + esbuild-darwin-arm64 "0.15.18" + esbuild-freebsd-64 "0.15.18" + esbuild-freebsd-arm64 "0.15.18" + esbuild-linux-32 "0.15.18" + esbuild-linux-64 "0.15.18" + esbuild-linux-arm "0.15.18" + esbuild-linux-arm64 "0.15.18" + esbuild-linux-mips64le "0.15.18" + esbuild-linux-ppc64le "0.15.18" + esbuild-linux-riscv64 "0.15.18" + esbuild-linux-s390x "0.15.18" + esbuild-netbsd-64 "0.15.18" + esbuild-openbsd-64 "0.15.18" + esbuild-sunos-64 "0.15.18" + esbuild-windows-32 "0.15.18" + esbuild-windows-64 "0.15.18" + esbuild-windows-arm64 "0.15.18" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^1.13.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + version "8.6.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" + integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== + +eslint-plugin-eslint-comments@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" eslint-plugin-functional@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-functional/-/eslint-plugin-functional-3.2.1.tgz#d5ad668b57646ad24f4ef0476328408681d59061" - integrity sha512-uJ8W0FznWsKp4exxO79b0xSc1WNROzDiVNGgSFOwdZCBeUHQf89BqwqlshNW9aSz/kg2gVGs+Ue6AeTpNSFM/g== + version "3.7.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-functional/-/eslint-plugin-functional-3.7.2.tgz#c90325dddfa822fab27419375084d12158f05da1" + integrity sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg== dependencies: "@typescript-eslint/experimental-utils" "^4.9.1" array.prototype.flatmap "^1.2.4" @@ -2387,13 +4579,18 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@^7.30.0: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" - integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" + "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" @@ -2442,15 +4639,24 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0: +espree@^9.0.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.0.tgz#3646d4e3f58907464edba852fa047e6a27bdf113" + integrity sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + version "1.4.2" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" + integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== dependencies: estraverse "^5.1.0" @@ -2461,99 +4667,167 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -ethers@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.1.tgz#bcff1e9f45bf1a061bf313ec04e8d9881d2d53f9" - integrity sha512-SrcddMdCgP1hukDvCPd87Aipbf4NWjQvdfAbZ65XSZGbfyuYPtIrUJPDH5B1SBRsdlfiEgX3eoz28DdBDzMNFg== - dependencies: - "@ethersproject/abi" "5.4.0" - "@ethersproject/abstract-provider" "5.4.0" - "@ethersproject/abstract-signer" "5.4.0" - "@ethersproject/address" "5.4.0" - "@ethersproject/base64" "5.4.0" - "@ethersproject/basex" "5.4.0" - "@ethersproject/bignumber" "5.4.0" - "@ethersproject/bytes" "5.4.0" - "@ethersproject/constants" "5.4.0" - "@ethersproject/contracts" "5.4.0" - "@ethersproject/hash" "5.4.0" - "@ethersproject/hdnode" "5.4.0" - "@ethersproject/json-wallets" "5.4.0" - "@ethersproject/keccak256" "5.4.0" - "@ethersproject/logger" "5.4.0" - "@ethersproject/networks" "5.4.1" - "@ethersproject/pbkdf2" "5.4.0" - "@ethersproject/properties" "5.4.0" - "@ethersproject/providers" "5.4.1" - "@ethersproject/random" "5.4.0" - "@ethersproject/rlp" "5.4.0" - "@ethersproject/sha2" "5.4.0" - "@ethersproject/signing-key" "5.4.0" - "@ethersproject/solidity" "5.4.0" - "@ethersproject/strings" "5.4.0" - "@ethersproject/transactions" "5.4.0" - "@ethersproject/units" "5.4.0" - "@ethersproject/wallet" "5.4.0" - "@ethersproject/web" "5.4.0" - "@ethersproject/wordlists" "5.4.0" - -ethers@^5.4.2: - version "5.4.5" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.5.tgz#cec133b9f5b514dc55e2561ee7aa7218c33affd7" - integrity sha512-PPZ6flOAj230sXEWf/r/It6ZZ5c7EOVWx+PU87Glkbg79OtT7pLE1WgL4MRdwx6iF7HzSOvUUI+8cAmcdzo12w== - dependencies: - "@ethersproject/abi" "5.4.0" - "@ethersproject/abstract-provider" "5.4.1" - "@ethersproject/abstract-signer" "5.4.1" - "@ethersproject/address" "5.4.0" - "@ethersproject/base64" "5.4.0" - "@ethersproject/basex" "5.4.0" - "@ethersproject/bignumber" "5.4.1" - "@ethersproject/bytes" "5.4.0" - "@ethersproject/constants" "5.4.0" - "@ethersproject/contracts" "5.4.1" - "@ethersproject/hash" "5.4.0" - "@ethersproject/hdnode" "5.4.0" - "@ethersproject/json-wallets" "5.4.0" - "@ethersproject/keccak256" "5.4.0" - "@ethersproject/logger" "5.4.0" - "@ethersproject/networks" "5.4.2" - "@ethersproject/pbkdf2" "5.4.0" - "@ethersproject/properties" "5.4.0" - "@ethersproject/providers" "5.4.4" - "@ethersproject/random" "5.4.0" - "@ethersproject/rlp" "5.4.0" - "@ethersproject/sha2" "5.4.0" - "@ethersproject/signing-key" "5.4.0" - "@ethersproject/solidity" "5.4.0" - "@ethersproject/strings" "5.4.0" - "@ethersproject/transactions" "5.4.0" - "@ethersproject/units" "5.4.0" - "@ethersproject/wallet" "5.4.0" - "@ethersproject/web" "5.4.0" - "@ethersproject/wordlists" "5.4.0" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.4.4, ethers@^5.5.1, ethers@^5.5.4, ethers@^5.6.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^4.0.7: +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +eventemitter3@^4.0.0, eventemitter3@^4.0.4, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -2563,40 +4837,161 @@ events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +expo-modules-autolinking@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz#45ba8cb1798f9339347ae35e96e9cc70eafb3727" + integrity sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw== + dependencies: + chalk "^4.1.0" + commander "^7.2.0" + fast-glob "^3.2.5" + find-up "~5.0.0" + fs-extra "^9.1.0" + +expo-random@*: + version "13.0.0" + resolved "https://registry.yarnpkg.com/expo-random/-/expo-random-13.0.0.tgz#fc9c1496ac9f7555563d86de0db25966739c028f" + integrity sha512-aGb0vtUmFFuW0TF1rdOgsz89zEVD/RXUPUnnZy5+i3jJeQ2PerJ4uo72/EuWqHpCBNto8/qT+aCzFinmQDeTAA== + dependencies: + base64-js "^1.3.0" + +exponential-backoff@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +express@^4.14.0: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: - type "^2.0.0" + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2604,23 +4999,35 @@ fast-glob@^3.1.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" - integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2640,6 +5047,27 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== + dependencies: + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" + find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -2648,6 +5076,22 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +find-up@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -2657,9 +5101,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" - integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flow-copy-source@^2.0.9: version "2.0.9" @@ -2673,65 +5117,123 @@ flow-copy-source@^2.0.9: yargs "^15.0.1" flow-typed@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-3.3.1.tgz#538bbcf13098916a09731f06ed6c0e5b8aee7303" - integrity sha512-svxMNRJNTeKfOwBt/bPZvOrgkjpYH1nXC2v7dgbq4sZgZu/Slna6kAPD45fnOJ4D0TCS2B4yp6Nhc32AV1sxpQ== + version "3.8.0" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-3.8.0.tgz#2ed83e4723ede48a6c71135de90289c4031a19c6" + integrity sha512-Lgmj8K69kbTz7UjKjiuaG/UNaZpyoyCGKU9wL9wrcqw0a9GNvuRe7llueHSJThKyuOsymEmZf3TOpMUD2Fw1HQ== dependencies: - "@octokit/rest" "^16.43.1" - colors "^1.4.0" + "@octokit/rest" "^18.12.0" + colors "1.4.0" flowgen "^1.10.0" fs-extra "^8.1.0" glob "^7.1.6" - got "^10.5.7" + got "^11.8.5" md5 "^2.2.1" mkdirp "^1.0.3" + node-stream-zip "^1.15.0" prettier "^1.19.1" rimraf "^3.0.2" semver "7.3.2" - table "^5.4.6" - through "^2.3.8" - unzipper "^0.10.8" + table "^6.7.3" which "^2.0.2" yargs "^15.1.0" flowgen@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/flowgen/-/flowgen-1.14.1.tgz#a1da7cbe78bd3897291257dc60c566e14540c95a" - integrity sha512-rpwM75zi4BH5CLHtak0/1wZ40/3eEi2E7CafjiGPnyL2b9y3zznSrgbNTnpkspU1o4C0Ypsvfwi0lFslIVxWVw== + version "1.21.0" + resolved "https://registry.yarnpkg.com/flowgen/-/flowgen-1.21.0.tgz#f7ecb693892c4bd069492dbf77db561bbb451aa9" + integrity sha512-pFNFFyMLRmW6njhOIm5TrbGUDTv64aujmys2KrkRE2NYD8sXwJUyicQRwU5SPRBRJnFSD/FNlnHo2NnHI5eJSw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/highlight" "^7.10.4" + "@babel/code-frame" "^7.16.7" + "@babel/highlight" "^7.16.7" commander "^6.1.0" lodash "^4.17.20" - prettier "^2.1.1" + prettier "^2.5.1" shelljs "^0.8.4" - typescript "^4.0.2" + typescript "~4.4.4" typescript-compiler "^1.4.1-2" -follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.7, follow-redirects@^1.14.8, follow-redirects@^1.14.9, follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data@4.0.0, form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@^2.11.1, fp-ts@^2.12.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.13.1.tgz#1bf2b24136cca154846af16752dc29e8fa506f2a" + integrity sha512-0eu5ULPS2c/jsa1lGFneEFFEdTbembJv8e4QKXeVJ3lm/5hyve06dlKZrpxmMwJt6rYen7sxmHHK2CLaXvWuWQ== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -2741,40 +5243,62 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2790,21 +5314,19 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" + has-symbols "^1.0.3" get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" @@ -2813,10 +5335,30 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -2825,109 +5367,188 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.0, glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -google-protobuf@^3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.3.tgz#f87595073545a77946c8f0b67c302c5f7646d700" - integrity sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg== +globby@^13.1.2: + version "13.1.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" + integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +google-protobuf@^3.14.0, google-protobuf@^3.20.1: + version "3.21.2" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" + integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" -got@^10.5.7: - version "10.7.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" - integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: - "@sindresorhus/is" "^2.0.0" - "@szmarczak/http-timer" "^4.0.0" + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^2.0.0" - cacheable-request "^7.0.1" - decompress-response "^5.0.0" - duplexer3 "^0.1.4" - get-stream "^5.0.0" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" lowercase-keys "^2.0.0" - mimic-response "^2.1.0" p-cancelable "^2.0.0" - p-event "^4.0.0" responselike "^2.0.0" - to-readable-stream "^2.0.0" - type-fest "^0.10.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= +graceful-fs@^4.1.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" @@ -2945,6 +5566,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -2953,21 +5582,114 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hi-base32@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.1.tgz#1279f2ddae2673219ea5870c2121d2a33132857e" + integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@^1.7.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -ieee754@^1.1.13: +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2977,10 +5699,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.0.5, ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -2993,17 +5715,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3013,27 +5735,93 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +injectpromise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/injectpromise/-/injectpromise-1.0.0.tgz#c621f7df2bbfc1164d714f1fb229adec2079da39" + integrity sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA== + +inquirer@^8.2.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +io-ts-reporters@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/io-ts-reporters/-/io-ts-reporters-2.0.1.tgz#0154545aefd115f0f175a41743ed7327d19b1c34" + integrity sha512-RVpLstYBsmTGgCW9wJ5KVyN/eRnRUDp87Flt4D1O3aJ7oAnd8csq8aXuu7ZeNK8qEDKmjUl9oUuzfwikaNAMKQ== + dependencies: + "@scarf/scarf" "^1.1.1" + +io-ts@^2.2.16: + version "2.2.20" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.20.tgz#be42b75f6668a2c44f706f72ee6e4c906777c7f5" + integrity sha512-Rq2BsYmtwS5vVttie4rqrOCIfHCS9TgpRLFpKQCM1wZBBRY9nWVGmEvm2FnDbSE2un1UE39DvFpTR5UL47YDcA== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" @@ -3043,68 +5831,93 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-function@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" - integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-gzip@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-2.0.0.tgz#f4fed2bbd9f96bf2cb39e19262797fdb15aad933" + integrity sha512-jtO4Njg6q58zDo/Pu4027beSZ0VdsZlt8/5Moco6yAg+DIxb5BK/xUYqYG2+MD4+piKldXJNHxRkhEYI2fvrxA== + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-nan@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" @@ -3113,15 +5926,17 @@ is-nan@^1.2.1: call-bind "^1.0.0" define-properties "^1.1.3" -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" @@ -3133,23 +5948,32 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" + has-tostringtag "^1.0.0" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" @@ -3158,48 +5982,143 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== +is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: - available-typed-arrays "^1.0.2" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - foreach "^2.0.5" - has-symbols "^1.0.1" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" -is-typedarray@1.0.0, is-typedarray@^1.0.0: +is-typedarray@1.0.0, is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iso-url@~0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.7.tgz#de7e48120dae46921079fe78f325ac9e9217a385" + integrity sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog== + +isomorphic-webcrypto@2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz#4a7493b486ef072b9f11b6f8fd66adde856e3eec" + integrity sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ== + dependencies: + "@peculiar/webcrypto" "^1.0.22" + asmcrypto.js "^0.22.0" + b64-lite "^1.3.1" + b64u-lite "^1.0.1" + msrcrypto "^1.5.6" + str2buf "^1.3.0" + webcrypto-shim "^0.1.4" + optionalDependencies: + "@unimodules/core" "*" + "@unimodules/react-native-adapter" "*" + expo-random "*" + react-native-securerandom "^0.1.1" + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== -js-base64@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.6.1.tgz#555aae398b74694b4037af1f8a5a6209d170efbe" - integrity sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jayson@^3.4.4: + version "3.7.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" + integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + lodash "^4.17.20" + uuid "^8.3.2" + ws "^7.4.5" + +joi@^17.7.0: + version "17.8.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.8.3.tgz#d772fe27a87a5cda21aace5cf11eee8671ca7e6f" + integrity sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +js-base64@^3.6.1, js-base64@^3.7.2, js-base64@^3.7.4: + version "3.7.5" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" + integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== + +js-logger@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/js-logger/-/js-logger-1.6.1.tgz#8f09671b515e4a6f31dced8fdb8923432e2c60af" + integrity sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA== + +js-sha256@0.9.0, js-sha256@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== -js-sha3@0.5.7: +js-sha3@0.5.7, js-sha3@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-tokens@^4.0.0: +js-sha512@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3212,7 +6131,47 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -json-bigint@1.0.0: +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js2xmlparser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== + dependencies: + xmlcreate "^2.0.4" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdoc@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-4.0.2.tgz#a1273beba964cf433ddf7a70c23fd02c3c60296e" + integrity sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg== + dependencies: + "@babel/parser" "^7.20.15" + "@jsdoc/salty" "^0.2.1" + "@types/markdown-it" "^12.2.3" + bluebird "^3.7.2" + catharsis "^0.9.0" + escape-string-regexp "^2.0.0" + js2xmlparser "^4.0.2" + klaw "^3.0.0" + markdown-it "^12.3.2" + markdown-it-anchor "^8.4.1" + marked "^4.0.10" + mkdirp "^1.0.4" + requizzle "^0.2.3" + strip-json-comments "^3.1.0" + underscore "~1.13.2" + +json-bigint@1.0.0, json-bigint@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== @@ -3227,7 +6186,7 @@ json-buffer@3.0.1: json-duplicate-key-handle@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-duplicate-key-handle/-/json-duplicate-key-handle-1.0.0.tgz#0678bd17822d23d8c0d0958b43011875fa37f363" - integrity sha1-Bni9F4ItI9jA0JWLQwEYdfo382M= + integrity sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw== dependencies: backslash "^0.2.0" @@ -3241,34 +6200,70 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json-text-sequence@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.1.1.tgz#a72f217dc4afc4629fff5feb304dc1bd51a2f3d2" + integrity sha512-L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w== dependencies: - minimist "^1.2.5" + delimit-stream "0.1.0" + +jsonc-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" -keccak@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jssha@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.2.0.tgz#88ec50b866dd1411deaddbe6b3e3692e4c710f16" + integrity sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q== -keccak@^3.0.1: +keccak@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== @@ -3277,15 +6272,24 @@ keccak@^3.0.1: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keccak@^3.0.0, keccak@^3.0.1, keccak@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + kefir@^3.7.3: version "3.8.8" resolved "https://registry.yarnpkg.com/kefir/-/kefir-3.8.8.tgz#235932ddfbed422acebf5d7cba503035e9ea05c5" integrity sha512-xWga7QCZsR2Wjy2vNL3Kq/irT+IwxwItEWycRRlT5yhqHZK2fmEhziP+LzcJBWSTAMranGKtGTQ6lFpyJS3+jA== keyv@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" - integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== dependencies: json-buffer "3.0.1" @@ -3294,6 +6298,18 @@ keyvaluestorage-interface@^1.0.0: resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== + dependencies: + graceful-fs "^4.1.9" + +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -3302,10 +6318,25 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +linkify-it@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== + dependencies: + uc.micro "^1.0.1" + +local-pkg@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== locate-path@^5.0.0: version "5.0.0" @@ -3314,51 +6345,112 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@^5.0.0, long@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" + integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.1: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -3378,15 +6470,41 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -macos-release@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" - integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -marked@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/marked/-/marked-2.1.3.tgz#bd017cef6431724fd4b27e0657f5ceb14bff3753" - integrity sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA== +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== + +markdown-it-anchor@^8.4.1: + version "8.6.7" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" + integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== + +markdown-it@^12.3.2: + version "12.3.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== + dependencies: + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +marked@^4.0.10: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +marked@^4.0.16: + version "4.2.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" + integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== md5.js@^1.3.4: version "1.3.5" @@ -3406,53 +6524,104 @@ md5@^2.2.1: crypt "0.0.2" is-buffer "~1.1.6" -merge2@^1.3.0: +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== +merkletreejs@^0.2.32: + version "0.2.32" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223" + integrity sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^3.1.9-1" + treeify "^1.1.0" + web3-utils "^1.3.4" -mime-db@1.49.0: - version "1.49.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -mime-types@^2.1.12: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - mime-db "1.48.0" + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.34, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.49.0" + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mimic-response@^2.0.0, mimic-response@^2.1.0: +mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -3461,93 +6630,289 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +miscreant@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/miscreant/-/miscreant-0.3.2.tgz#a91c046566cca70bd6b5e9fbdd3f67617fa85034" + integrity sha512-fL9KxsQz9BJB2KGPMHFrReioywkiomBiuaLk6EuChijK0BsJsIKJXdVomR+/bPj5mvbFD6wM0CM3bZio9g7OHA== mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -"mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" + integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +mri@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +msrcrypto@^1.5.6: + version "1.5.8" + resolved "https://registry.yarnpkg.com/msrcrypto/-/msrcrypto-1.5.8.tgz#be419be4945bf134d8af52e9d43be7fa261f4a1c" + integrity sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +multistream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" + integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw== + dependencies: + once "^1.4.0" + readable-stream "^3.6.0" + +mustache@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.13.2: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + nanoassert@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" - integrity sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40= + integrity sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +near-api-js@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-1.0.0.tgz#7aebc8e538071114ed242e6cce3b8fa956267691" + integrity sha512-OYItaQIYlKK27FG5PrqqtkTI8Vv9TEOCi7gXePYigS4o6WofXciAXNjr4sihDJ8Vzi6s7+eEkf3zTNP3042FBw== + dependencies: + bn.js "5.2.1" + borsh "^0.7.0" + bs58 "^4.0.0" + depd "^2.0.0" + error-polyfill "^0.1.3" + http-errors "^1.7.2" + js-sha256 "^0.9.0" + mustache "^4.0.0" + node-fetch "^2.6.1" + text-encoding-utf-8 "^1.0.2" + tweetnacl "^1.0.1" + +near-api-js@^0.44.2: + version "0.44.2" + resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-0.44.2.tgz#e451f68f2c56bd885c7b918db5818a3e6e9423d0" + integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== + dependencies: + bn.js "5.2.0" + borsh "^0.6.0" + bs58 "^4.0.0" + depd "^2.0.0" + error-polyfill "^0.1.3" + http-errors "^1.7.2" + js-sha256 "^0.9.0" + mustache "^4.0.0" + node-fetch "^2.6.1" + text-encoding-utf-8 "^1.0.2" + tweetnacl "^1.0.1" + +near-hd-key@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/near-hd-key/-/near-hd-key-1.2.1.tgz#f508ff15436cf8a439b543220f3cc72188a46756" + integrity sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg== + dependencies: + bip39 "3.0.2" + create-hmac "1.1.7" + tweetnacl "1.0.3" -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +near-seed-phrase@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/near-seed-phrase/-/near-seed-phrase-0.2.0.tgz#fb7cf89682112b1160ab68abb50dc821f49be18a" + integrity sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ== + dependencies: + bip39-light "^1.0.7" + bs58 "^4.0.1" + near-hd-key "^1.2.1" + tweetnacl "^1.0.2" -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nmtree@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/nmtree/-/nmtree-1.0.6.tgz#953e057ad545e9e627f1275bd25fea4e92c1cf63" + integrity sha512-SUPCoyX5w/lOT6wD/PZEymR+J899984tYEOYjuDqQlIOeX5NSb1MEsCcT0az+dhZD0MLAj5hGBZEpKQxuDdniA== + dependencies: + commander "^2.11.0" -node-abi@^2.21.0, node-abi@^2.7.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.0.tgz#8be53bf3e7945a34eea10e0fc9a5982776cf550b" - integrity sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: - semver "^5.4.1" + lower-case "^2.0.2" + tslib "^2.0.3" -node-addon-api@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681" - integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg== +node-abi@^2.21.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" node-addon-api@^2.0.0: version "2.0.2" @@ -3559,15 +6924,29 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== -node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-fetch@2, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== node-hid@2.1.1: version "2.1.1" @@ -3578,10 +6957,10 @@ node-hid@2.1.1: node-addon-api "^3.0.2" prebuild-install "^6.0.0" -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= +node-stream-zip@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" + integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -3593,12 +6972,12 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - path-key "^2.0.0" + path-key "^3.0.0" npmlog@^4.0.1: version "4.1.2" @@ -3613,17 +6992,37 @@ npmlog@^4.0.1: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +o3@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" + integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== + dependencies: + capability "^0.2.5" -object-assign@^4, object-assign@^4.1.0: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.10.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1: version "1.1.5" @@ -3633,49 +7032,69 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" object.fromentries@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onigasm@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892" - integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA== +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - lru-cache "^5.1.1" + mimic-fn "^2.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" optionator@^0.9.1: version "0.9.1" @@ -3689,30 +7108,35 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== -p-event@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-limit@^2.2.0: version "2.3.0" @@ -3721,6 +7145,20 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3728,18 +7166,35 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: - p-finally "^1.0.0" + p-limit "^4.0.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" + integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== + +pako@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3747,47 +7202,64 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parseqs@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" - integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== -parseuri@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" - integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.9: +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + +pbkdf2@^3.0.17, pbkdf2@^3.0.9, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -3803,41 +7275,46 @@ perf_hooks@0.0.1: resolved "https://registry.yarnpkg.com/perf_hooks/-/perf_hooks-0.0.1.tgz#253e7e18b71fcc0390fd3afb2cd7cf1685df040c" integrity sha512-qG/D9iA4KDme+KF4vCObJy6Bouu3BlQnmJ8jPydVPm32NJBD9ZK1ZNgXSYaZKHkVC1sKSqUiLgFvAZPUiIEnBw== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" platform@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== -prebuild-install@^5.3.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" - integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== +postcss@^8.4.18: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" prebuild-install@^6.0.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.3.tgz#8ea1f9d7386a0b30f7ef20247e36f8b2b82825a2" - integrity sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q== + version "6.1.4" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" + integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" @@ -3858,26 +7335,64 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + prettier@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.1.1, prettier@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== +prettier@^2.3.2, prettier@^2.5.1: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== + +pretty-quick@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" + integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0, progress@^2.0.3: +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +protobufjs-cli@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz#f531201b1c8c7772066aa822bf9a08318b24a704" + integrity sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA== + dependencies: + chalk "^4.0.0" + escodegen "^1.13.0" + espree "^9.0.0" + estraverse "^5.1.0" + glob "^8.0.0" + jsdoc "^4.0.0" + minimist "^1.2.0" + semver "^7.1.2" + tmp "^0.2.1" + uglify-js "^3.7.7" + protobufjs@6.10.2: version "6.10.2" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" @@ -3897,6 +7412,73 @@ protobufjs@6.10.2: "@types/node" "^13.7.0" long "^4.0.0" +protobufjs@6.11.3, protobufjs@^6.11.2, protobufjs@^6.11.3: + version "6.11.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" + integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +protobufjs@^7.0.0, protobufjs@^7.1.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.2.tgz#2af401d8c547b9476fb37ffc65782cf302342ca3" + integrity sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +ps-tree@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -3905,10 +7487,46 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pvtsutils@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de" + integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ== + dependencies: + tslib "^2.4.0" + +pvutils@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" + integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== + +qs@6.10.1: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@6.13.5: version "6.13.5" @@ -3919,11 +7537,25 @@ query-string@6.13.5: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + randombytes@^2.0.1, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -3931,6 +7563,21 @@ randombytes@^2.0.1, randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -3941,7 +7588,14 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@~2.3.6: +react-native-securerandom@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz#f130623a412c338b0afadedbc204c5cbb8bf2070" + integrity sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw== + dependencies: + base64-js "*" + +readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -3970,27 +7624,72 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +readonly-date@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" + integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +request@^2.79.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -4002,39 +7701,58 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requizzle@^0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" + integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== + dependencies: + lodash "^4.17.21" + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.6: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.1.6, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -4049,6 +7767,38 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rlp@^2.0.0, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +rollup@^2.79.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rpc-websockets@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" + integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== + dependencies: + "@babel/runtime" "^7.17.2" + eventemitter3 "^4.0.7" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4056,21 +7806,21 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@6: +rxjs@6, rxjs@^6.6.3, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -rxjs@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" - integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== +rxjs@^7.5.5, rxjs@^7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: - tslib "~2.1.0" + tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -4080,47 +7830,150 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-json-utils@1.0.0: +safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.0.0.tgz#8b1d68b13cff2ac6a5b68e6c9651cf7f8bb56d9b" - integrity sha512-n0hJm6BgX8wk3G+AS8MOQnfcA8dfE6ZMUfwkHUNx69YxPlU3HDaZTHXWto35Z+C4mOjK1odlT95WutkGC+0Idw== + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@3.0.1: +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -scryptsy@2.1.0, scryptsy@^2.1.0: +scryptsy@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== +secp256k1@^4.0.1, secp256k1@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +secretjs@=1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/secretjs/-/secretjs-1.4.7.tgz#4f9120142c4e269a678edc54165807adf30762fe" + integrity sha512-9vm/n6ZKvAhqENfqPOAtJCV3e6wLlJLhiRtvKrjyzDzCC76F8kOHak3PONqks29EDgynhscuf2O46V6ljwLgUQ== + dependencies: + "@cosmjs/encoding" "0.27.1" + "@cosmjs/math" "0.27.1" + "@improbable-eng/grpc-web" "0.15.0" + "@improbable-eng/grpc-web-node-http-transport" "0.15.0" + "@noble/hashes" "1.0.0" + "@noble/secp256k1" "1.6.3" + "@osmonauts/helpers" "0.3.8" + bech32 "2.0.0" + big-integer "1.6.51" + bignumber.js "9.0.2" + bip32 "2.0.6" + bip39 "3.0.4" + curve25519-js "0.0.4" + google-protobuf "^3.14.0" + is-gzip "2.0.0" + miscreant "0.3.2" + pako "2.0.4" + protobufjs "6.11.3" + secure-random "1.1.2" + +secure-random@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/secure-random/-/secure-random-1.1.2.tgz#ed103b460a851632d420d46448b2a900a41e7f7c" + integrity sha512-H2bdSKERKdBV1SwoqYm6C0y+9EA94v6SUBOWO8kDndc4NoUih7Dv6Tsgma7zO1lv27wIvjlD0ZpMQk7um5dheQ== + semver@7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^5.4.1, semver@^5.5.0: +semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^7.2.1, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@^7.1.2, semver@^7.2.1, semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== -setimmediate@~1.0.4: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -4133,7 +7986,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -4147,7 +8000,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -4155,37 +8008,60 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shelljs@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" -shiki@^0.9.3: - version "0.9.5" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.5.tgz#c8da81a05fbfd1810729c6873901a729a72ec541" - integrity sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ== +shiki@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" + integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== dependencies: - json5 "^2.2.0" - onigasm "^2.2.5" + jsonc-parser "^3.0.0" + vscode-oniguruma "^1.6.1" vscode-textmate "5.2.0" -signal-exit@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-cbor@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/simple-cbor/-/simple-cbor-0.4.1.tgz#0c88312e87db52b94e0e92f6bd1cf634e86f8a22" + integrity sha512-rijcxtwx2b4Bje3sqeIqw5EeW7UlOIC4YfOdwqIKacpvRQ/D78bWg/4/0m5e0U91oKvlGh7LlJuZCu07ISCC7w== simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-get@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" once "^1.3.1" @@ -4196,14 +8072,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== slice-ansi@^4.0.0: version "4.0.0" @@ -4214,49 +8086,43 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -socket.io-adapter@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz#a442720cb09a4823cfb81287dda1f9b52d4ccdb2" - integrity sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" socket.io-client@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.1.3.tgz#236daa642a9f229932e00b7221e843bf74232a62" - integrity sha512-hISFn6PDpgDifVUiNklLHVPTMv1LAk8poHArfIUdXa+gKgbr0MZbAlquDFqCqsF30yBqa+jg42wgos2FK50BHA== + version "4.6.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.6.1.tgz#80d97d5eb0feca448a0fb6d69a7b222d3d547eab" + integrity sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ== dependencies: - "@types/component-emitter" "^1.2.10" - backo2 "~1.0.2" - component-emitter "~1.3.0" - debug "~4.3.1" - engine.io-client "~5.1.2" - parseuri "0.0.6" - socket.io-parser "~4.0.4" + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.4.0" + socket.io-parser "~4.2.1" -socket.io-parser@~4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== +socket.io-parser@~4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.2.tgz#1dd384019e25b7a3d374877f492ab34f2ad0d206" + integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" + "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.1.3.tgz#d114328ef27ab31b889611792959c3fa6d502500" - integrity sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q== - dependencies: - "@types/cookie" "^0.4.0" - "@types/cors" "^2.8.10" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.1" - engine.io "~5.1.1" - socket.io-adapter "~2.3.1" - socket.io-parser "~4.0.4" +sort-object-keys@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map@^0.6.1: +source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -4266,66 +8132,119 @@ split-on-first@^1.0.0: resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +start-server-and-test@^1.14.0: + version "1.15.4" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.15.4.tgz#8dd7c695c2c1f7e6e024843ca2224ee7d58d9a02" + integrity sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg== + dependencies: + arg "^5.0.2" + bluebird "3.7.2" + check-more-types "2.24.0" + debug "4.3.4" + execa "5.1.1" + lazy-ass "1.6.0" + ps-tree "1.2.0" + wait-on "7.0.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +str2buf@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/str2buf/-/str2buf-1.3.0.tgz#a4172afff4310e67235178e738a2dbb573abead0" + integrity sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA== + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== + dependencies: + duplexer "~0.1.1" + +stream-transform@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-3.2.2.tgz#3d6083d6582eddac233645fcee574fc56ebeb184" + integrity sha512-DHZQPNxvjU2qdQlGcpitn8pkJHQVTqdshtgXaLz6Vc5VCAognbGuuwGS5ugeqGVnyw8j4h89QcV8cwm0D1+V0A== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" string_decoder@^1.1.1: version "1.3.0" @@ -4344,35 +8263,28 @@ string_decoder@~1.1.1: strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^5.0.1" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-eof@^1.0.0: +strip-hex-prefix@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" @@ -4382,7 +8294,17 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +superstruct@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" + integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== + +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== supports-color@^5.3.0: version "5.5.0" @@ -4398,27 +8320,58 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +symbol.inspect@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol.inspect/-/symbol.inspect-1.0.1.tgz#e13125b8038c4996eb0dfa1567332ad4dcd0763f" + integrity sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ== + +synp@^1.9.10: + version "1.9.10" + resolved "https://registry.yarnpkg.com/synp/-/synp-1.9.10.tgz#53163321a600418c9b06af0db499939ffce12907" + integrity sha512-G9Z/TXTaBG1xNslUf3dHFidz/8tvvRaR560WWyOwyI7XrGGEGBTEIIg4hdRh1qFtz8mPYynAUYwWXUg/Zh0Pzw== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + bash-glob "^2.0.0" + colors "1.4.0" + commander "^7.2.0" + eol "^0.9.1" + lodash "4.17.21" + nmtree "^1.0.6" + semver "^7.3.5" + sort-object-keys "^1.1.3" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== +table@^6.0.9, table@^6.7.3: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" - lodash.clonedeep "^4.5.0" lodash.truncate "^4.4.2" slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" tar-fs@^2.0.0: version "2.1.1" @@ -4441,20 +8394,98 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +teslabot@^1.3.0, teslabot@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/teslabot/-/teslabot-1.5.0.tgz#70f544516699ca5f696d8ae94f3d12cd495d5cd6" + integrity sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg== + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through@^2.3.8: +thor-devkit@^2.0.4, thor-devkit@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/thor-devkit/-/thor-devkit-2.0.7.tgz#0454053eda03abe1b785dc4f534f7aa1321dd89c" + integrity sha512-km+r+4fD9KP9Ea8bCfobVg6dsRgiTfi2GK9vVGHmnFHP7WJc98C+7B/VmfunEigsavkwcHcASLX50CwzZfgU+g== + dependencies: + "@vechain/ethers" "^4.0.27-5" + bignumber.js "^7.2.1" + blakejs "^1.1.2" + elliptic "6.5.4" + fast-json-stable-stringify "^2.1.0" + js-sha3 "0.5.7" + rlp "^2.0.0" + +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -to-readable-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" - integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-secp256k1@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + +tinypool@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.2.4.tgz#4d2598c4689d1a2ce267ddf3360a9c6b3925a20c" + integrity sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ== + +tinyspy@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" + integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.0, tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" to-regex-range@^5.0.1: version "5.0.1" @@ -4463,20 +8494,163 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +ton-crypto-primitives@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ton-crypto-primitives/-/ton-crypto-primitives-2.0.0.tgz#e85cd68c0d523f6bdf3f306201a76e51b7e9312e" + integrity sha512-K+qKjpS0h9sPW6oExcpxnzuQ7nEgHEiDKwIqE/jWD25o8iFGe3FWj1gKxFNbKE9wwYKc5IV8FwrU+raF0KO5nQ== + dependencies: + jssha "3.2.0" + +ton-crypto@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ton-crypto/-/ton-crypto-2.1.0.tgz#10b1de64a9cd92bde5a8a6678f952f49335c7e9a" + integrity sha512-PZnmCOShfgq9tCRM8E7hG8nCkpkOyZvDLPXmZN92ZEBrfTT0NKKf0imndkxG5DkgWMjc6IKfgpnEaJDH9qN6ZQ== + dependencies: + jssha "3.2.0" + ton-crypto-primitives "2.0.0" + tweetnacl "1.0.3" + +ton-crypto@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ton-crypto/-/ton-crypto-3.2.0.tgz#cf8cd5410d8f04b04b359f80415b11efb312c60e" + integrity sha512-fltdBNQ45gARMuGMEOjPZWPJ5eSql8p3CA0Dj7tPv5lhU5ziT8SxXLAzDraR9HJ8YpjBHLVvYyhMLRiEwxgtMQ== + dependencies: + jssha "3.2.0" + ton-crypto-primitives "2.0.0" + tweetnacl "1.0.3" + +ton-x@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ton-x/-/ton-x-2.1.0.tgz#d4983a5c487bbcbe76b5e374ad346024afb06b4e" + integrity sha512-AJx4kRaRqPdTCQO8ik8E0aICg4NutUgTxnepbjoc7Emi3bMKoANiketmOFK07+vFX9QQO2NoJnqM8kgSsposhw== + dependencies: + "@types/bn.js" "^5.1.0" + axios "^0.27.0" + bn.js "^5.2.0" + fp-ts "^2.12.0" + io-ts "^2.2.16" + teslabot "^1.5.0" + ton "9.8.0" + ton-crypto "^3.0.0" + +ton@9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/ton/-/ton-9.8.0.tgz#28bc72276ebcacf9dff24f617505c55ccaa614ef" + integrity sha512-aH/7ODiEulPRZracSfQ4KeaV6iDmzjn14+YMsZ9x0sNlzhtP4blMIFXPJFp4BOc4INb5vTrfA0u+JtOoXlBO0A== + dependencies: + axios "^0.25.0" + bn.js "5.2.0" + dataloader "^2.0.0" + ethjs-unit "0.1.6" + fp-ts "^2.11.1" + io-ts "^2.2.16" + io-ts-reporters "^2.0.0" + symbol.inspect "1.0.1" + teslabot "^1.3.0" + ton-crypto "2.1.0" + tweetnacl "1.0.3" + +tonweb-mnemonic@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tonweb-mnemonic/-/tonweb-mnemonic-1.0.1.tgz#bb1b8bb6220f56f8e230b8a8f9555ff5bcbd4681" + integrity sha512-YQAEXQHBHb0dnNy50bwIutXwyWa6Den7+cLcXWoG7ZClcqo4bjALOr6tnIqI+hs5jab+AGSsRjilxcp8ao/CpA== + dependencies: + tweetnacl "^1.0.3" + +tonweb@^0.0.57: + version "0.0.57" + resolved "https://registry.yarnpkg.com/tonweb/-/tonweb-0.0.57.tgz#f18c44525690d74b81cd248453d5769c872a068a" + integrity sha512-/kqRn3/H1nw2bJ68uOtvwkOj6/9EgYaYpMYAXs93I2pLdJZxVKNwTuZ7weGKVmrn9tOt/nCNooq3OAZDSAVUSg== + dependencies: + "@ledgerhq/hw-transport-web-ble" "5.48.0" + "@ledgerhq/hw-transport-webhid" "5.48.0" + "@ledgerhq/hw-transport-webusb" "5.48.0" + bn.js "5.1.1" + ethjs-unit "0.1.6" + isomorphic-webcrypto "2.3.8" + node-fetch "2.6.7" + tweetnacl "1.0.3" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + +tronstation@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tronstation/-/tronstation-1.0.1.tgz#b33224cdef5f1c7560763b185f132d9ac35ad3f3" + integrity sha512-iuHjDHw/63ID5pj2PESeGLl7n7IAG6yunupKfOA2l5ekaWhZo6RSscmdwSIqBEdnXFh7Jmd2HJIzowyMFt+/zQ== + dependencies: + "@babel/runtime" "^7.0.0" + babel-runtime "^6.26.0" -tslib@^1.8.1, tslib@^1.9.0: +tronweb@^4.1.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-4.4.0.tgz#098e5d27e8143f34290f2938f448859b6a5efacc" + integrity sha512-0yPmjQE1drPcDtW4YCXFjtvDQmKc/utjKB2J6U5GDcWWhsGqE8yFjdIMJRa1yj1a/oFQNlthKMzw4Jd7lkWbYA== + dependencies: + "@babel/runtime" "^7.0.0" + axios "^0.26.1" + bignumber.js "^9.0.1" + elliptic "^6.5.4" + ethers "^5.4.4" + eventemitter3 "^3.1.0" + injectpromise "^1.0.0" + lodash "^4.17.21" + semver "^5.6.0" + validator "^13.7.0" + +ts-node@^10.8.2: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsutils@^3.21.0: version "3.21.0" @@ -4488,15 +8662,20 @@ tsutils@^3.21.0: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" -tweetnacl@1.0.3, tweetnacl@1.x.x, tweetnacl@^1.0.3: +tweetnacl@1.0.3, tweetnacl@^1.0.1, tweetnacl@^1.0.2, tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4504,25 +8683,54 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" - integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -4531,61 +8739,81 @@ typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc-default-themes@^0.12.10: - version "0.12.10" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz#614c4222fe642657f37693ea62cad4dafeddf843" - integrity sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA== +typedarray-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz#cdd2933c61dd3f5f02eda5d012d441f95bfeb50a" + integrity sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ== -typedoc@^0.21.0: - version "0.21.4" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.21.4.tgz#fced3cffdc30180db60a5dbfec9dbbb273cb5b31" - integrity sha512-slZQhvD9U0d9KacktYAyuNMMOXJRFNHy+Gd8xY2Qrqq3eTTTv3frv3N4au/cFnab9t3T5WA0Orb6QUjMc+1bDA== +typedoc@^0.22.6: + version "0.22.18" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.18.tgz#1d000c33b66b88fd8cdfea14a26113a83b7e6591" + integrity sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA== dependencies: - glob "^7.1.7" - handlebars "^4.7.7" + glob "^8.0.3" lunr "^2.3.9" - marked "^2.1.1" - minimatch "^3.0.0" - progress "^2.0.3" - shiki "^0.9.3" - typedoc-default-themes "^0.12.10" + marked "^4.0.16" + minimatch "^5.1.0" + shiki "^0.10.1" + +typeforce@^1.11.5: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== typescript-compiler@^1.4.1-2: version "1.4.1-2" resolved "https://registry.yarnpkg.com/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz#ba4f7db22d91534a1929d90009dce161eb72fd3f" - integrity sha1-uk99si2RU0oZKdkACdzhYety/T8= + integrity sha512-EMopKmoAEJqA4XXRFGOb7eSBhmQMbBahW6P1Koayeatp0b4AW2q/bBqYWkpG7QVQc9HGQUiS4trx2ZHcnAaZUg== + +typescript@^4.9.3: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^4.0.2, typescript@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@~4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== u2f-api@0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== -uglify-js@^3.1.4: - version "3.13.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d" - integrity sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg== +u3@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" + integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@^3.7.7: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" +underscore@~1.13.2: + version "1.13.6" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== universal-user-agent@^6.0.0: version "6.0.0" @@ -4597,21 +8825,15 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unzipper@^0.10.8: - version "0.10.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: version "4.4.1" @@ -4620,82 +8842,434 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + usb@^1.7.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/usb/-/usb-1.7.1.tgz#d723223ec517b802c4d2082e31a4649c65c491c5" - integrity sha512-HTCfx6NnNRhv5y98t04Y8j2+A8dmQnEGxCMY2/zN/0gkiioLYfTZ5w/PEKlWRVUY+3qLe9xwRv9pHLkjQYNw/g== + version "1.9.2" + resolved "https://registry.yarnpkg.com/usb/-/usb-1.9.2.tgz#fb6b36f744ecc707a196c45a6ec72442cb6f2b73" + integrity sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg== dependencies: - bindings "^1.4.0" - node-addon-api "3.0.2" - prebuild-install "^5.3.3" + node-addon-api "^4.2.0" + node-gyp-build "^4.3.0" utf-8-validate@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" - integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== +util@^0.12.0, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" is-generator-function "^1.0.7" is-typed-array "^1.1.3" - safe-buffer "^5.1.2" which-typed-array "^1.1.2" -uuid@8.3.2: +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -"validator@git+https://github.com/xp-network/migration-validator#master": - version "1.0.0" - resolved "git+https://github.com/xp-network/migration-validator#af59e3f92a1c8c26240e96cda6e04dbd1c653572" - dependencies: - "@bitauth/libauth" "^1.17.1" - "@elrondnetwork/erdjs" "^6.5.0" - "@polkadot/api" "^5.2.1" - "@polkadot/api-contract" "^5.2.1" - "@polkadot/keyring" "^7.0.3" - "@polkadot/types" "^5.2.1" - "@polkadot/util" "^7.1.1" - "@polkadot/util-crypto" "^7.1.1" - "@polkadot/wasm-crypto" "^4.1.2" - "@polkadot/x-randomvalues" "^7.1.1" - "@types/google-protobuf" "^3.15.4" - bignumber.js "^9.0.1" - ethers "^5.4.2" - google-protobuf "^3.17.3" - socket.io "^4.1.3" - socket.io-client "^4.1.3" - yargs "^17.0.1" +validator-ts@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/validator-ts/-/validator-ts-0.9.1.tgz#1ab8748e6ddddc63e9e5edbf7fea91a82b7a466f" + integrity sha512-3PCL0AzKWvG/4Y12zUgk6OVup9zQ3vXGzqUIZ69GnSapIV9lgr9VCLFReUgTe04vY6Fm4WzAL7a1HdIVyWRw8Q== + +validator@^13.7.0: + version "13.9.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" + integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== -vary@^1: +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +"vite@^2.9.12 || ^3.0.0-0": + version "3.2.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.5.tgz#dee5678172a8a0ab3e547ad4148c3d547f90e86a" + integrity sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.18" + resolve "^1.22.1" + rollup "^2.79.1" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.18.1.tgz#33c5003fc8c4b296801897ae1a3f142f57015574" + integrity sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA== + dependencies: + "@types/chai" "^4.3.1" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + chai "^4.3.6" + debug "^4.3.4" + local-pkg "^0.4.2" + tinypool "^0.2.4" + tinyspy "^1.0.0" + vite "^2.9.12 || ^3.0.0-0" + +vlq@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-2.0.4.tgz#6057b85729245b9829e3cc7755f95b228d4fe041" + integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA== + +vscode-oniguruma@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== vscode-textmate@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== -websocket@^1.0.34: +wait-on@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" + integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== + dependencies: + axios "^0.27.2" + joi "^17.7.0" + lodash "^4.17.21" + minimist "^1.2.7" + rxjs "^7.8.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web3-bzz@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.8.2.tgz#67ea1c775874056250eece551ded22905ed08784" + integrity sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz#82066560f8085e6c7b93bcc8e88b441289ea9f9f" + integrity sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw== + dependencies: + web3-eth-iban "1.8.2" + web3-utils "1.8.2" + +web3-core-method@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.8.2.tgz#ba5ec68084e903f0516415010477618be017eac2" + integrity sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.8.2" + web3-core-promievent "1.8.2" + web3-core-subscriptions "1.8.2" + web3-utils "1.8.2" + +web3-core-promievent@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz#e670d6b4453632e6ecfd9ad82da44f77ac1585c9" + integrity sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz#dda95e83ca4808949612a41e54ecea557f78ef26" + integrity sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g== + dependencies: + util "^0.12.5" + web3-core-helpers "1.8.2" + web3-providers-http "1.8.2" + web3-providers-ipc "1.8.2" + web3-providers-ws "1.8.2" + +web3-core-subscriptions@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz#0c8bd49439d83c6f0a03c70f00b24a915a70a5ed" + integrity sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.2" + +web3-core@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.8.2.tgz#333e93d7872b1a36efe758ed8b89a7acbdd962c2" + integrity sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ== + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.8.2" + web3-core-method "1.8.2" + web3-core-requestmanager "1.8.2" + web3-utils "1.8.2" + +web3-eth-abi@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz#16e1e9be40e2527404f041a4745111211488f31a" + integrity sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.8.2" + +web3-eth-accounts@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz#b894f5d5158fcae429da42de75d96520d0712971" + integrity sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA== + dependencies: + "@ethereumjs/common" "2.5.0" + "@ethereumjs/tx" "3.3.2" + eth-lib "0.2.8" + ethereumjs-util "^7.1.5" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.8.2" + web3-core-helpers "1.8.2" + web3-core-method "1.8.2" + web3-utils "1.8.2" + +web3-eth-contract@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz#5388b7130923d2b790c09a420391a81312a867fb" + integrity sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA== + dependencies: + "@types/bn.js" "^5.1.0" + web3-core "1.8.2" + web3-core-helpers "1.8.2" + web3-core-method "1.8.2" + web3-core-promievent "1.8.2" + web3-core-subscriptions "1.8.2" + web3-eth-abi "1.8.2" + web3-utils "1.8.2" + +web3-eth-ens@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz#0a086ad4d919102e28b9fd3036df246add9df22a" + integrity sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.8.2" + web3-core-helpers "1.8.2" + web3-core-promievent "1.8.2" + web3-eth-abi "1.8.2" + web3-eth-contract "1.8.2" + web3-utils "1.8.2" + +web3-eth-iban@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz#5cb3022234b13986f086353b53f0379a881feeaf" + integrity sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ== + dependencies: + bn.js "^5.2.1" + web3-utils "1.8.2" + +web3-eth-personal@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz#3526c1ebaa4e7bf3a0a8ec77e34f067cc9a750b2" + integrity sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.8.2" + web3-core-helpers "1.8.2" + web3-core-method "1.8.2" + web3-net "1.8.2" + web3-utils "1.8.2" + +web3-eth@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.8.2.tgz#8562287ae1803c30eb54dc7d832092e5739ce06a" + integrity sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ== + dependencies: + web3-core "1.8.2" + web3-core-helpers "1.8.2" + web3-core-method "1.8.2" + web3-core-subscriptions "1.8.2" + web3-eth-abi "1.8.2" + web3-eth-accounts "1.8.2" + web3-eth-contract "1.8.2" + web3-eth-ens "1.8.2" + web3-eth-iban "1.8.2" + web3-eth-personal "1.8.2" + web3-net "1.8.2" + web3-utils "1.8.2" + +web3-net@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.8.2.tgz#97e1e0015fabc4cda31017813e98d0b5468dd04f" + integrity sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag== + dependencies: + web3-core "1.8.2" + web3-core-method "1.8.2" + web3-utils "1.8.2" + +web3-providers-connex@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/web3-providers-connex/-/web3-providers-connex-0.3.1.tgz#45eb139ea70c76a8bb625a964d92f61c8033adc2" + integrity sha512-0jnPkPszyHA9nlvB1hJ+FDT8pLixF7GzmZm0gB/j1UonuYYuYD3VtNgQ2+N4jDkkFuRd3H/sZRR+Piq0tV8aig== + dependencies: + "@vechain/connex-driver" "^2.0.8" + "@vechain/connex-types" "^2.0.2" + ethers "^5.6.2" + eventemitter3 "^4.0.4" + thor-devkit "^2.0.4" + web3 "^1.7.1" + +web3-providers-http@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.8.2.tgz#fbda3a3bbc8db004af36e91bec35f80273b37885" + integrity sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.8.2" + +web3-providers-ipc@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz#e52a7250f40c83b99a2482ec5b4cf2728377ae5c" + integrity sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.8.2" + +web3-providers-ws@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz#56a2b701387011aca9154ca4bc06ea4b5f27e4ef" + integrity sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.2" + websocket "^1.0.32" + +web3-shh@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.8.2.tgz#217a417f0d6e243dd4d441848ffc2bd164cea8a0" + integrity sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw== + dependencies: + web3-core "1.8.2" + web3-core-method "1.8.2" + web3-core-subscriptions "1.8.2" + web3-net "1.8.2" + +web3-utils@1.8.2, web3-utils@^1.3.4: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.2.tgz#c32dec5e9b955acbab220eefd7715bc540b75cc9" + integrity sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@^1.7.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.8.2.tgz#95a4e5398fd0f01325264bf8e5e8cdc69a7afe86" + integrity sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw== + dependencies: + web3-bzz "1.8.2" + web3-core "1.8.2" + web3-eth "1.8.2" + web3-eth-personal "1.8.2" + web3-net "1.8.2" + web3-shh "1.8.2" + web3-utils "1.8.2" + +webcrypto-core@^1.7.4: + version "1.7.6" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.6.tgz#e32c4a12a13de4251f8f9ef336a6cba7cdec9b55" + integrity sha512-TBPiewB4Buw+HI3EQW+Bexm19/W4cP/qZG/02QJCXN+iN+T5sl074vZ3rJcle/ZtDBQSgjkbsQO/1eFcxnSBUA== + dependencies: + "@peculiar/asn1-schema" "^2.1.6" + "@peculiar/json-schema" "^1.1.12" + asn1js "^3.0.1" + pvtsutils "^1.3.2" + tslib "^2.4.0" + +webcrypto-shim@^0.1.4: + version "0.1.7" + resolved "https://registry.yarnpkg.com/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz#da8be23061a0451cf23b424d4a9b61c10f091c12" + integrity sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== @@ -4707,6 +9281,14 @@ websocket@^1.0.34: utf-8-validate "^5.0.2" yaeti "^0.0.6" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4721,25 +9303,19 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== +which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" - foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" which@^1.2.9: version "1.3.1" @@ -4756,46 +9332,24 @@ which@^2.0.1, which@^2.0.2: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -window-getters@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/window-getters/-/window-getters-1.0.0.tgz#b5b264538c4c79cead027f9997850222bf6d0852" - integrity sha512-xyvEFq3x+7dCA7NFhqOmTMk0fPmmAzCUYL2svkw2LGBaXXQLRP0lFnfXHzysri9WZNMkzp/FD1u0w2Qc7Co+JA== - -window-getters@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/window-getters/-/window-getters-1.0.1.tgz#a564c258413b4808789633d8bfb7ed741d798aa0" - integrity sha512-cojBfDeV58XEurDgj+rre15c7dvu27bWCPlOIpwQgreOsw6qQk0UGDR1hi7ZHKw5+L0AENUNNWGG2h4yr2Y3hQ== - -window-metadata@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/window-metadata/-/window-metadata-1.0.0.tgz#fece0446db2f50be0612a211f25fc693917e823b" - integrity sha512-eYoXsZ9X4J+6xZgbHhNAatSR5bCtT409q8B+2Ol9ySx7qsdtgVZcNfox4qszFmKlGsFtT2b1Tcmcy69bRMObcg== + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - window-getters "^1.0.0" + string-width "^1.0.2 || 2 || 3 || 4" -windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== +wif@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" + integrity sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ== dependencies: - execa "^1.0.0" + bs58check "<3.0.0" -word-wrap@^1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -4817,24 +9371,97 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" - integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== - -ws@7.4.6, ws@~7.4.2: +ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -xxhashjs@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" - integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== +ws@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.1.0, ws@^7.4.5: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.5.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" + integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== + +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlcreate@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== + +xmlhttprequest-ssl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +"xpnet-web3-contracts@git+https://github.com/xp-network/XP.network-HECO-Migration#aa9473ea3b0f748bba54f5755abcfd17e3548237": + version "0.1.0" + resolved "git+https://github.com/xp-network/XP.network-HECO-Migration#aa9473ea3b0f748bba54f5755abcfd17e3548237" dependencies: - cuint "^0.2.2" + ethers "^5.5.4" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.3" @@ -4849,9 +9476,14 @@ y18n@^5.0.5: yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -yallist@^3.0.2: +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -4891,10 +9523,10 @@ yargs@^15.0.1, yargs@^15.1.0: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.1: - version "17.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" - integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" escalade "^3.1.1" @@ -4904,7 +9536,41 @@ yargs@^17.0.1: y18n "^5.0.5" yargs-parser "^20.2.2" -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= +yarn-audit-fix@^9.3.7: + version "9.3.9" + resolved "https://registry.yarnpkg.com/yarn-audit-fix/-/yarn-audit-fix-9.3.9.tgz#24b6e16af8fc7987d9ceb0f8d8612469261864b5" + integrity sha512-RVmbSVm0Dfr4qSUtqc8EM0wvOAKRL5wtw2i/nUfaIqg8m4seP/umyUcpEvkU8gBmizY7QdDeVWIVndy3qAWBhw== + dependencies: + "@types/find-cache-dir" "^3.2.1" + "@types/fs-extra" "^9.0.13" + "@types/lodash-es" "^4.17.6" + "@types/semver" "^7.3.12" + "@types/yarnpkg__lockfile" "^1.1.5" + "@yarnpkg/lockfile" "^1.1.0" + chalk "^5.0.1" + commander "^10.0.0" + find-cache-dir "^4.0.0" + find-up "^6.3.0" + fs-extra "^10.1.0" + globby "^13.1.2" + js-yaml "^4.1.0" + lodash-es "^4.17.21" + pkg-dir "^7.0.0" + semver "^7.3.7" + synp "^1.9.10" + tslib "^2.4.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==