From 5e52293d3ec4da059ee6abe12cd8d3a3787d105b Mon Sep 17 00:00:00 2001 From: Kirill Fedoseev Date: Fri, 28 May 2021 02:11:28 +0700 Subject: [PATCH 1/2] Multi part contract verification in Etherscan and Blockscout (#35) --- .github/workflows/release.yml | 19 +- Dockerfile | 4 - Dockerfile.dev | 3 - deploy/VERIFICATION.md | 72 +++ deploy/getChainId.js | 4 + deploy/src/deploymentUtils.js | 19 - deploy/src/utils/verifier.js | 114 ----- deploy/uploadToIPFS.js | 41 ++ deploy/verifyEtherscan.js | 0 deploy/verifyEtherscan.sh | 20 + flatten.sh | 31 -- package.json | 5 +- truffle-config.js | 9 +- yarn.lock | 819 +++++++++++++++++++++++++++++++--- 14 files changed, 919 insertions(+), 241 deletions(-) create mode 100644 deploy/VERIFICATION.md create mode 100644 deploy/getChainId.js delete mode 100644 deploy/src/utils/verifier.js create mode 100644 deploy/uploadToIPFS.js create mode 100644 deploy/verifyEtherscan.js create mode 100755 deploy/verifyEtherscan.sh delete mode 100755 flatten.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c875a0a..de2d26d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,7 +5,7 @@ on: types: [created] jobs: - flats: + source: runs-on: ubuntu-latest steps: - id: get_release @@ -23,13 +23,22 @@ jobs: key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }} - run: yarn if: ${{ !steps.yarn-cache.outputs.cache-hit }} - - run: yarn flatten - - run: zip flats $(find flats -name '*.sol') + - run: yarn compile + - run: zip contracts $(find contracts -name '*.sol') + - run: zip artifacts $(find build -name '*.json') - uses: actions/upload-release-asset@v1.0.2 env: GITHUB_TOKEN: ${{ github.token }} with: upload_url: ${{ steps.get_release.outputs.upload_url }} - asset_path: flats.zip - asset_name: omnibridge-nft-contracts-flattened-${{ steps.get_release.outputs.tag_name }}.zip + asset_path: contracts.zip + asset_name: omnibridge-nft-contracts-${{ steps.get_release.outputs.tag_name }}.zip + asset_content_type: application/zip + - uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ github.token }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: artifacts.zip + asset_name: omnibridge-nft-artifacts-${{ steps.get_release.outputs.tag_name }}.zip asset_content_type: application/zip diff --git a/Dockerfile b/Dockerfile index 6333466..99be499 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,9 +9,6 @@ COPY truffle-config.js truffle-config.js COPY ./contracts ./contracts RUN yarn compile -COPY flatten.sh flatten.sh -RUN yarn flatten - FROM node:14 WORKDIR /contracts @@ -20,7 +17,6 @@ COPY package.json yarn.lock ./ RUN yarn install --prod COPY --from=contracts /contracts/build ./build -COPY --from=contracts /contracts/flats ./flats COPY deploy.sh deploy.sh COPY ./deploy ./deploy diff --git a/Dockerfile.dev b/Dockerfile.dev index 728fc2c..dd83f57 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -9,9 +9,6 @@ COPY truffle-config.js truffle-config.js COPY ./contracts ./contracts RUN yarn compile -COPY flatten.sh flatten.sh -RUN yarn flatten - COPY deploy.sh deploy.sh COPY ./deploy ./deploy COPY ./test ./test diff --git a/deploy/VERIFICATION.md b/deploy/VERIFICATION.md new file mode 100644 index 0000000..5746f21 --- /dev/null +++ b/deploy/VERIFICATION.md @@ -0,0 +1,72 @@ +## Process + +Due to usage of `pragma abicoder v2;` in the contracts source code, +it is not possible to verify contracts through flattened source files. + +Instead, two different approaches can be used for Etherscan and Blockscout explorers. + +## Verification in Etherscan/Bscscan + +The simplest semi-automated solution found so far is to use `truffle-plugin-verify` and the corresponding shell script. +First, collect information about deployed contracts from the logs for the particular chain in the following format: + +Example of deployed contracts list in the Foreign chain: +``` +EternalStorageProxy@0xEc05e3f4D845f0E39e33146395aCE5D35c01Fcc0 +ERC721BridgeToken@0xd880d9d42Fad3dcbe885F499AE15822ACBF1f1F8 +ERC1155BridgeToken@0xaa5cF36b6d97a709fccF3fd4BEa94dA9753d9cA4 +ForeignNFTOmnibridge@0x964C086398cba3c0BaE520bE900E660a84cA331c +``` + +Example of deployed contracts list in the Home chain: +``` +EternalStorageProxy@0x2c0bF58cC87763783e35a625ff6a3e50d9E05337 +ERC721BridgeToken@0x714c7985B073b1177356560631A30D24F60f9241 +ERC1155BridgeToken@0xB2bf0271DB0d30090756A25B01be2698f3E5e556 +OwnedUpgradeabilityProxy@0x4dCD4Dd4096eab35611D496087ceF7DaF1D4E57C +SelectorTokenGasLimitManager@0x783A53aC5ab27d24E83A0211e6Ff70c3705a5435 +HomeNFTOmnibridge@0xFF9c66898B706cd56d2dB9587aB597A000eC6ed6 + +# If required: +# NFTForwardingRulesManager@0x... +``` + +After that run the following command for source verification in Etherscan for foreign network: +```bash +deploy/verifyEtherscan.sh ForeignNFTOmnibridge@0x964C086398cba3c0BaE520bE900E660a84cA331c +``` + +Use `VERIFY_HOME=true` environment variable for verification in the home network: +```bash +VERIFY_HOME=true deploy/verifyEtherscan.sh HomeNFTOmnibridge@0xFF9c66898B706cd56d2dB9587aB597A000eC6ed6 +``` + +## Verification in Blockscout + +In order to verify multi-file contract in Blockscout, it must support Sourcify integration (present in the xDAI instance). + +The list of actions is the following: +1) Upload contracts sources and metadata to IPFS. +2) Wait until Sourcify monitor will handle uploaded files and will automatically verify deployed contracts. +3) Import sources to blockscout from Sourcify database. + +### Upload to IPFS + +Run the following in our terminal + +```bash +node deploy/uploadToIPFS.js +``` + +You should see all compiled artifacts being uploaded sequentially, their hashes should be printed into the console. + +### Check that contracts are verified in Sourcify + +You can check if your contracts are verified by visiting https://sourcify.dev +Select the corresponding chain, then enter your contract address. +You should be able to see a green check sign at the top. + +### Import sources to Blockscout + +Go to the contract page of your contract in the Blockscout, click `Code`, then `Verify & Publish`, then `Sources and Metadata JSON file`. +Upload any file from the `./build/contract/*.json`. It could be any artifact, it does not matter, since our sources are already present in the Sourcify database. diff --git a/deploy/getChainId.js b/deploy/getChainId.js new file mode 100644 index 0000000..1614384 --- /dev/null +++ b/deploy/getChainId.js @@ -0,0 +1,4 @@ +const Web3 = require('web3') + +const web3 = new Web3(process.env.RPC_URL) +web3.eth.getChainId().then(console.log) diff --git a/deploy/src/deploymentUtils.js b/deploy/src/deploymentUtils.js index 39fbfa7..411d18f 100644 --- a/deploy/src/deploymentUtils.js +++ b/deploy/src/deploymentUtils.js @@ -9,26 +9,15 @@ const { GAS_LIMIT_EXTRA, HOME_DEPLOYMENT_GAS_PRICE, FOREIGN_DEPLOYMENT_GAS_PRICE, - HOME_EXPLORER_URL, - FOREIGN_EXPLORER_URL, - HOME_EXPLORER_API_KEY, - FOREIGN_EXPLORER_API_KEY, DEPLOYMENT_ACCOUNT_PRIVATE_KEY, } = require('./web3') -const verifier = require('./utils/verifier') async function deployContract(contractJson, args, { network, nonce }) { let web3 - let apiUrl - let apiKey if (network === 'foreign') { web3 = web3Foreign - apiUrl = FOREIGN_EXPLORER_URL - apiKey = FOREIGN_EXPLORER_API_KEY } else { web3 = web3Home - apiUrl = HOME_EXPLORER_URL - apiKey = HOME_EXPLORER_API_KEY } const instance = new web3.eth.Contract(contractJson.abi) const result = instance @@ -45,14 +34,6 @@ async function deployContract(contractJson, args, { network, nonce }) { instance.options.address = receipt.contractAddress instance.deployedBlockNumber = receipt.blockNumber - if (apiUrl) { - let constructorArguments - if (args.length) { - constructorArguments = result.substring(contractJson.bytecode.length) - } - await verifier({ artifact: contractJson, constructorArguments, address: receipt.contractAddress, apiUrl, apiKey }) - } - return instance } diff --git a/deploy/src/utils/verifier.js b/deploy/src/utils/verifier.js deleted file mode 100644 index 10e9fb3..0000000 --- a/deploy/src/utils/verifier.js +++ /dev/null @@ -1,114 +0,0 @@ -const axios = require('axios') -const querystring = require('querystring') -const fs = require('fs') -const path = require('path') -const promiseRetry = require('promise-retry') -const { EXPLORER_TYPES, REQUEST_STATUS } = require('../constants') - -const basePath = path.join(__dirname, '..', '..', '..', 'flats') - -const flat = async (contractPath) => { - const pathArray = contractPath.split('/') - const name = pathArray[pathArray.length - 1] - - const flatName = name.replace('.sol', '_flat.sol') - - const filePath = path.join(basePath, flatName) - - return fs.readFileSync(filePath).toString() -} - -const sendRequest = (url, queries) => axios.post(url, querystring.stringify(queries)) - -const sendVerifyRequestEtherscan = async (contractPath, options) => { - const contract = await flat(contractPath) - const postQueries = { - apikey: options.apiKey, - module: 'contract', - action: 'verifysourcecode', - contractaddress: options.address, - sourceCode: contract, - codeformat: 'solidity-single-file', - contractname: options.contractName, - compilerversion: options.compiler, - optimizationUsed: options.optimizationUsed ? 1 : 0, - runs: options.runs, - constructorArguements: options.constructorArguments, - evmversion: options.evmVersion, - } - - return sendRequest(options.apiUrl, postQueries) -} - -const sendVerifyRequestBlockscout = async (contractPath, options) => { - const contract = await flat(contractPath) - const postQueries = { - module: 'contract', - action: 'verify', - addressHash: options.address, - contractSourceCode: contract, - name: options.contractName, - compilerVersion: options.compiler, - optimization: options.optimizationUsed, - optimizationRuns: options.runs, - constructorArguments: options.constructorArguments, - evmVersion: options.evmVersion, - } - - return sendRequest(options.apiUrl, postQueries) -} - -const getExplorerType = (apiUrl) => - apiUrl && apiUrl.includes('etherscan') ? EXPLORER_TYPES.ETHERSCAN : EXPLORER_TYPES.BLOCKSCOUT - -const verifyContract = async (contract, params, type) => { - try { - const verify = type === EXPLORER_TYPES.ETHERSCAN ? sendVerifyRequestEtherscan : sendVerifyRequestBlockscout - const result = await verify(contract, params) - if (result.data.message === REQUEST_STATUS.OK) { - console.log(`${params.address} verified in ${type}`) - return true - } - return false - } catch (e) { - return false - } -} - -const verifier = async ({ artifact, address, constructorArguments, apiUrl, apiKey }) => { - console.log(`verifying contract ${address}`) - const type = getExplorerType(apiUrl) - - let metadata - try { - metadata = JSON.parse(artifact.metadata) - } catch (e) { - console.log('Error on decoding values from artifact') - } - - const contract = artifact.sourcePath - const params = { - address, - contractName: artifact.contractName, - constructorArguments, - compiler: `v${artifact.compiler.version.replace('.Emscripten.clang', '')}`, - optimizationUsed: metadata.settings.optimizer.enabled, - runs: metadata.settings.optimizer.runs, - evmVersion: metadata.settings.evmVersion, - apiUrl, - apiKey, - } - - try { - await promiseRetry(async (retry) => { - const verified = await verifyContract(contract, params, type) - if (!verified) { - retry() - } - }) - } catch (e) { - console.log(`It was not possible to verify ${address} in ${type}`) - } -} - -module.exports = verifier diff --git a/deploy/uploadToIPFS.js b/deploy/uploadToIPFS.js new file mode 100644 index 0000000..7605681 --- /dev/null +++ b/deploy/uploadToIPFS.js @@ -0,0 +1,41 @@ +const IPFS = require('ipfs-http-client') +const shell = require('shelljs') +const path = require('path') + +async function main() { + const ipfs = IPFS.create({ + host: 'ipfs.infura.io', + port: 5001, + protocol: 'https', + }) + + const artifactPaths = shell.ls('./build/contracts/*.json') + + console.log('Uploading sources & metadata to IPFS (Infura Gateway)...') + console.log('========================================================') + + for (const p of artifactPaths) { + const artifact = require(path.join(process.cwd(), p)) + + console.log() + console.log(artifact.contractName) + console.log('-'.repeat(artifact.contractName.length)) + + const res1 = await ipfs.add(artifact.metadata) + console.log(`metadata: ${res1.path}`) + + const res2 = await ipfs.add(artifact.source) + console.log(`source: ${res2.path}`) + } + + console.log() + console.log('Finished.') + console.log() +} + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.log(err) + process.exit(1) + }) diff --git a/deploy/verifyEtherscan.js b/deploy/verifyEtherscan.js new file mode 100644 index 0000000..e69de29 diff --git a/deploy/verifyEtherscan.sh b/deploy/verifyEtherscan.sh new file mode 100755 index 0000000..574e877 --- /dev/null +++ b/deploy/verifyEtherscan.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e + +cd $(dirname $0) + +source .env + +if [ "$VERIFY_HOME" = "true" ]; then + VERIFICATION_RPC_URL="$HOME_RPC_URL" + VERIFICATION_ETHERSCAN_API_KEY="$HOME_EXPLORER_API_KEY" +else + VERIFICATION_RPC_URL="$FOREIGN_RPC_URL" + VERIFICATION_ETHERSCAN_API_KEY="$FOREIGN_EXPLORER_API_KEY" +fi + +VERIFICATION_CHAIN_ID=$(RPC_URL="$VERIFICATION_RPC_URL" node getChainId.js) \ +VERIFICATION_RPC_URL="$VERIFICATION_RPC_URL" \ +VERIFICATION_ETHERSCAN_API_KEY="$VERIFICATION_ETHERSCAN_API_KEY" \ +truffle run verify $@ --network for_etherscan_verification diff --git a/flatten.sh b/flatten.sh deleted file mode 100755 index 89bb81d..0000000 --- a/flatten.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -if [ -d flats ]; then - rm -rf flats -fi - -mkdir flats - -FLATTENER=./node_modules/.bin/truffle-flattener -BRIDGE_CONTRACTS_DIR=contracts/upgradeable_contracts -TOKEN_CONTRACTS_DIR=contracts/tokens - -echo "Flattening common bridge contracts" -${FLATTENER} contracts/upgradeability/EternalStorageProxy.sol > flats/EternalStorageProxy_flat.sol -${FLATTENER} contracts/upgradeability/OwnedUpgradeabilityProxy.sol > flats/OwnedUpgradeabilityProxy_flat.sol - -echo "Flattening contracts related to NFT Omnibridge" -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/HomeNFTOmnibridge.sol > flats/HomeNFTOmnibridge_flat.sol -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/ForeignNFTOmnibridge.sol > flats/ForeignNFTOmnibridge_flat.sol -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/components/bridged/ERC721TokenProxy.sol > flats/ERC721TokenProxy_flat.sol -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/components/bridged/ERC1155TokenProxy.sol > flats/ERC1155TokenProxy_flat.sol -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/modules/gas_limit/SelectorTokenGasLimitManager.sol > flats/SelectorTokenGasLimitManager_flat.sol -${FLATTENER} ${BRIDGE_CONTRACTS_DIR}/omnibridge_nft/modules/forwarding_rules/NFTForwardingRulesManager.sol > flats/NFTForwardingRulesManager_flat.sol - -echo "Flattening token contracts" -${FLATTENER} ${TOKEN_CONTRACTS_DIR}/ERC721BridgeToken.sol > flats/ERC721BridgeToken_flat.sol -${FLATTENER} ${TOKEN_CONTRACTS_DIR}/ERC1155BridgeToken.sol > flats/ERC1155BridgeToken_flat.sol - -for file in flats/*.sol; do - grep -v SPDX "$file" > tmp; mv tmp "$file" -done diff --git a/package.json b/package.json index 38a80c5..647910f 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "test": "scripts/test.sh", "coverage": "SOLIDITY_COVERAGE=true scripts/test.sh", "compile": "truffle compile", - "flatten": "bash flatten.sh 2>/dev/null", "lint": "yarn run lint:js && yarn run lint:sol", "lint:js": "eslint .", "lint:js:fix": "eslint . --fix", @@ -22,8 +21,10 @@ "bignumber.js": "^9.0.1", "dotenv": "^8.2.0", "envalid": "^6.0.2", + "ipfs-http-client": "^50.1.0", "promise-retry": "^2.0.1", "querystring": "^0.2.0", + "shelljs": "^0.8.4", "web3": "^1.3.0" }, "devDependencies": { @@ -45,7 +46,7 @@ "solhint-plugin-prettier": "0.0.5", "solidity-coverage": "^0.7.12", "truffle": "^5.1.55", - "truffle-flattener": "^1.4.2" + "truffle-plugin-verify": "^0.5.8" }, "engines": { "node": ">= 14" diff --git a/truffle-config.js b/truffle-config.js index 9e133ff..99a96c6 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -1,6 +1,10 @@ module.exports = { contracts_build_directory: './build/contracts', networks: { + for_etherscan_verification: { + network_id: process.env.VERIFICATION_CHAIN_ID, + host: process.env.VERIFICATION_RPC_URL, + }, ganache: { host: '127.0.0.1', port: 8545, @@ -22,5 +26,8 @@ module.exports = { }, }, }, - plugins: ['solidity-coverage'], + plugins: ['solidity-coverage', 'truffle-plugin-verify'], + api_keys: { + etherscan: process.env.VERIFICATION_ETHERSCAN_API_KEY, + }, } diff --git a/yarn.lock b/yarn.lock index 821649e..daee01d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -228,6 +228,11 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -254,39 +259,58 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz#371c67ebffe50f551c3146a9eec5fe6ffe862e92" integrity sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q== -"@resolver-engine/core@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.2.1.tgz#0d71803f6d3b8cb2e9ed481a1bf0ca5f5256d0c0" - integrity sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A== - dependencies: - debug "^3.1.0" - request "^2.85.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 sha1-m4sMxmPWaafY9vXQiToU00jzD78= -"@resolver-engine/fs@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.2.1.tgz#f98a308d77568cc02651d03636f46536b941b241" - integrity sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg== - dependencies: - "@resolver-engine/core" "^0.2.1" - debug "^3.1.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== -"@resolver-engine/imports-fs@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz#5a81ef3285dbf0411ab3b15205080a1ad7622d9e" - integrity sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ== - dependencies: - "@resolver-engine/fs" "^0.2.1" - "@resolver-engine/imports" "^0.2.2" - debug "^3.1.0" +"@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== -"@resolver-engine/imports@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.2.2.tgz#d3de55a1bb5f3beb7703fdde743298f321175843" - integrity sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg== +"@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= + +"@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= dependencies: - "@resolver-engine/core" "^0.2.1" - debug "^3.1.0" - hosted-git-info "^2.6.0" + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@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= + +"@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= + +"@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= + +"@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= "@sindresorhus/is@^0.14.0": version "0.14.0" @@ -298,11 +322,16 @@ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.10.2.tgz#404018b2824dc26ee61368f96d8d176a2028f9a3" integrity sha512-SFO5xlpR5rnqIds++4JDcXMG9b6KfslcxKoX+y19rizB0sNkv9mRs/TA5PhD4MrRbyaS60FkQ4updZtjPa4LjQ== -"@solidity-parser/parser@^0.8.0", "@solidity-parser/parser@^0.8.1", "@solidity-parser/parser@^0.8.2": +"@solidity-parser/parser@^0.8.1", "@solidity-parser/parser@^0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.8.2.tgz#a6a5e93ac8dca6884a99a532f133beba59b87b69" integrity sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ== +"@sovpro/delimited-stream@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz#4334bba7ee241036e580fdd99c019377630d26b4" + integrity sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -354,6 +383,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@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== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -364,6 +398,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== +"@types/node@>=13.7.0": + version "15.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" + integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + "@types/node@^10.12.18": version "10.17.50" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.50.tgz#7a20902af591282aa9176baefc37d4372131c32d" @@ -398,6 +437,13 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -500,6 +546,14 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== +any-signal@^2.1.0, any-signal@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-2.1.2.tgz#8d48270de0605f8b218cf9abe8e9c6a0e7418102" + integrity sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ== + dependencies: + abort-controller "^3.0.0" + native-abort-controller "^1.0.3" + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -623,6 +677,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +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.2" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" @@ -640,7 +699,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^0.21.0: +axios@^0.21.0, axios@^0.21.1: version "0.21.1" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== @@ -695,11 +754,27 @@ bip66@^1.1.5: dependencies: safe-buffer "^5.0.1" +bl@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2" + integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^3.4.0" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= +blob-to-it@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.2.tgz#bc76550638ca13280dbd3f202422a6a132ffcc8d" + integrity sha512-yD8tikfTlUGEOSHExz4vDCIQFLaBPXIL0KcxGQt9RbwMVXBEh+jokdJyStvTXPgWrdKfwgk7RX8GPsgrYzsyng== + dependencies: + browser-readablestream-to-it "^1.0.2" + bluebird@^3.5.0: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -741,6 +816,19 @@ body-parser@1.19.0, body-parser@^1.16.0: raw-body "2.4.0" type-is "~1.6.17" +borc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/borc/-/borc-3.0.0.tgz#49ada1be84de86f57bb1bb89789f34c186dfa4fe" + integrity sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g== + dependencies: + bignumber.js "^9.0.0" + buffer "^6.0.3" + commander "^2.15.0" + ieee754 "^1.1.13" + iso-url "^1.1.5" + json-text-sequence "~0.3.0" + readable-stream "^3.6.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -761,6 +849,11 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.2.tgz#f6b8d18e7a35b0321359261a32aa2c70f46921c4" + integrity sha512-lv4M2Z6RKJpyJijJzBQL5MNssS7i8yedl+QkhnLCyPtgNGNSXv1KthzUnye9NlRAtBAI80X6S9i+vK09Rzjcvg== + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -859,6 +952,14 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.1, 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" + bufferutil@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" @@ -1016,6 +1117,16 @@ cids@^0.7.1: multicodec "^1.0.0" multihashes "~0.4.15" +cids@^1.0.0, cids@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/cids/-/cids-1.1.6.tgz#ac7aea7dbcabaa64ca242b5d970d596a5c34d006" + integrity sha512-5P+Jas2bVpjiHibp/SOwKY+v7JhAjTChaAZN+vCIrsWXn/JZV0frX22Vp5zZgEyJRPco79pX+yNQ2S3LkRukHQ== + dependencies: + multibase "^4.0.1" + multicodec "^3.0.1" + multihashes "^4.0.1" + uint8arrays "^2.1.3" + 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" @@ -1024,6 +1135,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +circular@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/circular/-/circular-1.0.5.tgz#7da77af98bbde9ce4b5b358cd556b5dded2d3149" + integrity sha1-fad6+Yu96c5LWzWM1Va13e0tMUk= + class-is@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" @@ -1036,6 +1152,26 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-logger@^0.5.40: + version "0.5.40" + resolved "https://registry.yarnpkg.com/cli-logger/-/cli-logger-0.5.40.tgz#097f0e11b072c7c698a26c47f588a29c20b48b0b" + integrity sha1-CX8OEbByx8aYomxH9YiinCC0iws= + dependencies: + circular "^1.0.5" + cli-util "~1.1.27" + +cli-regexp@~0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-regexp/-/cli-regexp-0.1.2.tgz#6bcd93b09fb2ed1025d30a1155d5997954a53512" + integrity sha1-a82TsJ+y7RAl0woRVdWZeVSlNRI= + +cli-util@~1.1.27: + version "1.1.27" + resolved "https://registry.yarnpkg.com/cli-util/-/cli-util-1.1.27.tgz#42d69e36a040a321fc9cf851c1513cadc5093054" + integrity sha1-QtaeNqBAoyH8nPhRwVE8rcUJMFQ= + dependencies: + cli-regexp "~0.1.0" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -1081,7 +1217,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@~1.0.6: +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== @@ -1093,6 +1229,11 @@ commander@2.18.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== +commander@^2.15.0: + 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== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1269,14 +1410,7 @@ debug@4.1.1: dependencies: ms "^2.1.1" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -1324,6 +1458,11 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +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" @@ -1381,6 +1520,15 @@ dir-to-object@^2.0.0: resolved "https://registry.yarnpkg.com/dir-to-object/-/dir-to-object-2.0.0.tgz#29723e9bd1c3e58e4f307bd04ff634c0370c8f8a" integrity sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA== +dns-over-http-resolver@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz#194d5e140a42153f55bb79ac5a64dd2768c36af9" + integrity sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA== + dependencies: + debug "^4.3.1" + native-fetch "^3.0.0" + receptacle "^1.3.2" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -1433,6 +1581,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-fetch@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.7.3.tgz#06cf363d7f64073ec00a37e9949ec9d29ce6b08a" + integrity sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw== + dependencies: + encoding "^0.1.13" + elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" @@ -1466,6 +1621,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -1495,6 +1657,11 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +err-code@^3.0.0, err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2024,6 +2191,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +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@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2039,6 +2211,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + evp_bytestokey@^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" @@ -2137,6 +2314,11 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7" + integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ== + fast-glob@^3.0.3: version "3.2.4" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" @@ -2283,6 +2465,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +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" @@ -2320,6 +2511,16 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.1: + 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.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -2375,6 +2576,11 @@ get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: has "^1.0.3" has-symbols "^1.0.1" +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -2644,7 +2850,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: +hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== @@ -2697,6 +2903,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + 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" @@ -2704,7 +2917,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +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== @@ -2782,6 +2995,30 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +interface-datastore@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-4.0.1.tgz#bf549b4352bce3581a762625a5b58e0c9e0df953" + integrity sha512-Q2zh5jGWzLylee1wuT/aSi0aqy4mW7ePlWhfzoISRZ+Uoz3Vq8WksC4og/Sq4Au6p2ujNRlwMO9VjwrQ48HYYw== + dependencies: + err-code "^3.0.1" + ipfs-utils "^7.0.0" + iso-random-stream "^2.0.0" + it-all "^1.0.2" + it-drain "^1.0.1" + it-filter "^1.0.2" + it-take "^1.0.1" + nanoid "^3.0.2" + uint8arrays "^2.1.5" + +interface-ipld-format@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/interface-ipld-format/-/interface-ipld-format-1.0.0.tgz#8cd9b37363a3b7aee0b109f4fa55e89af31e20f8" + integrity sha512-/df/uHRUxE9LtTJaC1QAwgmHUjdVxvCvQKQLoMo2k4Ilu3uSob5vNmZqXXnuQQM4M5tZjyRbqMm+A+hvWbki8w== + dependencies: + cids "^1.1.6" + multicodec "^3.0.1" + multihashes "^4.0.2" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -2792,11 +3029,154 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^4.0.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== + 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== +ipfs-core-types@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.5.0.tgz#c5775f249e586a7c2e029b5ed2d73bcc548abb2d" + integrity sha512-Upd++4T3beEijnegundRgjSaKsyjqzyf9gmKZHy47rRetObC6trJZALvp5VBpiR0cQXoFEegcXpVOuC/om/4pw== + dependencies: + cids "^1.1.6" + interface-datastore "^4.0.0" + ipld-block "^0.11.1" + multiaddr "^9.0.1" + multibase "^4.0.2" + +ipfs-core-utils@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.8.1.tgz#46b8d530ad1f0577b4df185fe5869425db4e2e40" + integrity sha512-25InaceHlXNHzfoWGGtzv8jhq6/anPOJonCoxh2QlcqCNJS1NcrHgboTmMShMhWz9/67Pd0VMaku356Pou/smw== + dependencies: + any-signal "^2.1.2" + blob-to-it "^1.0.1" + browser-readablestream-to-it "^1.0.1" + cids "^1.1.6" + err-code "^3.0.1" + ipfs-core-types "^0.5.0" + ipfs-unixfs "^4.0.3" + ipfs-utils "^7.0.0" + it-all "^1.0.4" + it-map "^1.0.4" + it-peekable "^1.0.1" + multiaddr "^9.0.1" + multiaddr-to-uri "^7.0.0" + parse-duration "^1.0.0" + timeout-abort-controller "^1.1.1" + uint8arrays "^2.1.3" + +ipfs-http-client@^50.1.0: + version "50.1.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-50.1.0.tgz#5177553029a7c32f1c6be3eb1d91fab0d71ae437" + integrity sha512-w7zWRugPR9dm4TS/rshtwycjwGZkxk9AXHV1a8OoVYZHEi5BvHD+kp5PdskfrfJ2rBtnWEo3qo2OoIpBe2rxxQ== + dependencies: + abort-controller "^3.0.0" + any-signal "^2.1.2" + cids "^1.1.6" + debug "^4.1.1" + form-data "^4.0.0" + ipfs-core-types "^0.5.0" + ipfs-core-utils "^0.8.1" + ipfs-unixfs "^4.0.3" + ipfs-utils "^7.0.0" + ipld-block "^0.11.0" + ipld-dag-cbor "^1.0.0" + ipld-dag-pb "^0.22.1" + ipld-raw "^7.0.0" + it-last "^1.0.4" + it-map "^1.0.4" + it-tar "^3.0.0" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiaddr "^9.0.1" + multibase "^4.0.2" + multicodec "^3.0.1" + multihashes "^4.0.2" + nanoid "^3.1.12" + native-abort-controller "^1.0.3" + parse-duration "^1.0.0" + stream-to-it "^0.2.2" + uint8arrays "^2.1.3" + +ipfs-unixfs@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-4.0.3.tgz#7c43e5726052ade4317245358ac541ef3d63d94e" + integrity sha512-hzJ3X4vlKT8FQ3Xc4M1szaFVjsc1ZydN+E4VQ91aXxfpjFn9G2wsMo1EFdAXNq/BUnN5dgqIOMP5zRYr3DTsAw== + dependencies: + err-code "^3.0.1" + protobufjs "^6.10.2" + +ipfs-utils@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-7.0.0.tgz#8c1e2dc04af749e781230efc6ead7bfebe577dce" + integrity sha512-25Nj95cPcLVYROCk3vtfqQ30HBzsmgLjy6YlHkYbub4uO1JBKzP2gJMBFLfRPOfLGzT+0rYOCpWjnbYqDDxqIA== + dependencies: + abort-controller "^3.0.0" + any-signal "^2.1.0" + buffer "^6.0.1" + electron-fetch "^1.7.2" + err-code "^3.0.1" + is-electron "^2.2.0" + iso-url "^1.0.0" + it-glob "~0.0.11" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + nanoid "^3.1.20" + native-abort-controller "^1.0.3" + native-fetch "^3.0.0" + node-fetch "^2.6.1" + stream-to-it "^0.2.2" + +ipld-block@^0.11.0, ipld-block@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/ipld-block/-/ipld-block-0.11.1.tgz#c3a7b41aee3244187bd87a73f980e3565d299b6e" + integrity sha512-sDqqLqD5qh4QzGq6ssxLHUCnH4emCf/8F8IwjQM2cjEEIEHMUj57XhNYgmGbemdYPznUhffxFGEHsruh5+HQRw== + dependencies: + cids "^1.0.0" + +ipld-dag-cbor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ipld-dag-cbor/-/ipld-dag-cbor-1.0.0.tgz#329f84904e00a99cdebd6a03e972583af3d5d4d1" + integrity sha512-ViDkqpBDW10TTqFU23NC/eIbu0kuaD3QPTAFDu95mvei0zKu67c/Z2eTh5A0inBXSSvNZ23wzVkUinvxVfrDyw== + dependencies: + borc "^3.0.0" + cids "^1.0.0" + interface-ipld-format "^1.0.0" + is-circular "^1.0.2" + multicodec "^3.0.1" + multihashing-async "^2.0.0" + uint8arrays "^2.1.3" + +ipld-dag-pb@^0.22.1: + version "0.22.2" + resolved "https://registry.yarnpkg.com/ipld-dag-pb/-/ipld-dag-pb-0.22.2.tgz#a8c6a9744b7083fe8a0f6abc1c19a1534d6d1e37" + integrity sha512-5ZPo+hmH4YnPx0FIsJsWZFG9g8hCA5Oy0eGLA4lOPE6h1JHzn6VxnWoVkA22ft0i4koOuKNUqAXpepAKyf9rrw== + dependencies: + cids "^1.0.0" + interface-ipld-format "^1.0.0" + multicodec "^3.0.1" + multihashing-async "^2.0.0" + protobufjs "^6.10.2" + stable "^0.1.8" + uint8arrays "^2.0.5" + +ipld-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ipld-raw/-/ipld-raw-7.0.0.tgz#221fe0ad67c2734b0bc85186707218bc4c908587" + integrity sha512-24v84ORBQO5NVYSTHfYnJX4AIX4lQzIIL98au5fmMEwkS+gjGUrw7SqQaN0oTzIuVcJFpDbH5gEbS+x3AnW1hQ== + dependencies: + cids "^1.1.6" + interface-ipld-format "^1.0.0" + multicodec "^3.0.1" + multihashing-async "^2.1.2" + is-arguments@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" @@ -2826,6 +3206,11 @@ is-callable@^1.1.4, is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-circular@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-circular/-/is-circular-1.0.2.tgz#2e0ab4e9835f4c6b0ea2b9855a84acd501b8366c" + integrity sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA== + is-core-module@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -2843,6 +3228,11 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-electron@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0" + integrity sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2880,6 +3270,13 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -2905,6 +3302,11 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" @@ -2970,6 +3372,24 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +iso-constants@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/iso-constants/-/iso-constants-0.1.2.tgz#3d2456ed5aeaa55d18564f285ba02a47a0d885b4" + integrity sha512-OTCM5ZCQsHBCI4Wdu4tSxvDIkmDHd5EwJDps5mKqnQnWJSKlnwMs3EDZ4n3Fh1tmkWkDlyd2vCDbEYuPbyrUNQ== + +iso-random-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-2.0.0.tgz#3f0118166d5443148bbc134345fb100002ad0f1d" + integrity sha512-lGuIu104KfBV9ubYTSaE3GeAr6I69iggXxBHbTBc5u/XKlwlWl0LCytnkIZissaKqvxablwRD9B3ktVnmIUnEg== + dependencies: + events "^3.3.0" + readable-stream "^3.4.0" + +iso-url@^1.0.0, iso-url@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.1.5.tgz#875a0f2bf33fa1fc200f8d89e3f49eee57a8f0d9" + integrity sha512-+3JqoKdBTGmyv9vOkS6b9iHhvK34UajfTibrH/1HOK8TI7K2VsM0qOCd+aJdWKtSOA8g3PqZfcwDmnR0p3klqQ== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -2983,6 +3403,87 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +it-all@^1.0.2, it-all@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.5.tgz#e880510d7e73ebb79063a76296a2eb3cb77bbbdb" + integrity sha512-ygD4kA4vp8fi+Y+NBgEKt6W06xSbv6Ub/0V8d1r3uCyJ9Izwa1UspkIOlqY9fOee0Z1w3WRo1+VWyAU4DgtufA== + +it-concat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/it-concat/-/it-concat-2.0.0.tgz#b4dc02aeb7365bada05b247c1ee50f3bbc147419" + integrity sha512-jchrEB3fHlUENWkVJRmbFJ1A7gcjJDmwiolQsHhVC14DpUIbX8fgr3SOC7XNE5OoUUQNL6/RaMCPChkPemyQUw== + dependencies: + bl "^5.0.0" + +it-drain@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/it-drain/-/it-drain-1.0.4.tgz#15ee0e90fba4b5bc8cff1c61b8c59d4203293baa" + integrity sha512-coB7mcyZ4lWBQKoQGJuqM+P94pvpn2T3KY27vcVWPqeB1WmoysRC76VZnzAqrBWzpWcoEJMjZ+fsMBslxNaWfQ== + +it-filter@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-filter/-/it-filter-1.0.2.tgz#7a89b582d561b1f1ff09417ad86f509dfaab5026" + integrity sha512-rxFUyPCrhk7WrNxD8msU10iEPhQmROoqwuyWmQUYY1PtopwUGBYyra9EYG2nRZADYeuT83cohKWmKCWPzpeyiw== + +it-glob@~0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-0.0.11.tgz#c6d8daf783167e012a55cdcca52a33b7f4d6834f" + integrity sha512-p02iVYsvOPU7cW4sV9BC62Kz6Mz2aUTJz/cKWDeFqc05kzB3WgSq8OobZabVA/K4boSm6q+s0xOZ8xiArLSoXQ== + dependencies: + fs-extra "^9.0.1" + minimatch "^3.0.4" + +it-last@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.5.tgz#5c711c7d58948bcbc8e0cb129af3a039ba2a585b" + integrity sha512-PV/2S4zg5g6dkVuKfgrQfN2rUN4wdTI1FzyAvU+i8RV96syut40pa2s9Dut5X7SkjwA3P0tOhLABLdnOJ0Y/4Q== + +it-map@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.5.tgz#2f6a9b8f0ba1ed1aeadabf86e00b38c73a1dc299" + integrity sha512-EElupuWhHVStUgUY+OfTJIS2MZed96lDrAXzJUuqiiqLnIKoBRqtX1ZG2oR0bGDsSppmz83MtzCeKLZ9TVAUxQ== + +it-peekable@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.2.tgz#3b2c7948b765f35b3bb07abbb9b2108c644e73c1" + integrity sha512-LRPLu94RLm+lxLZbChuc9iCXrKCOu1obWqxfaKhF00yIp30VGkl741b5P60U+rdBxuZD/Gt1bnmakernv7bVFg== + +it-reader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-3.0.0.tgz#56596c7742ec7c63b7f7998f6bfa3f712e333d0e" + integrity sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ== + dependencies: + bl "^5.0.0" + +it-take@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-take/-/it-take-1.0.1.tgz#155b0f8ed4b6ff5eb4e9e7a2f4395f16b137b68a" + integrity sha512-6H6JAWYcyumKSpcIPLs6tHN4xnibphmyU79WQaYVCBtaBOzf4fn75wzvSH8fH8fcMlPBTWY1RlmOWleQxBt2Ug== + +it-tar@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/it-tar/-/it-tar-3.0.0.tgz#d25f2777c0da4d4bec1b01a1ab9d79495f459f4f" + integrity sha512-VhD1Hnx4IXDcQgYJnJgltkn+w5F8kiJaB46lqovh+YWfty2JGW7i40QQjWbSvcg1QfaU8is8AVX8xwx/Db9oOg== + dependencies: + bl "^5.0.0" + buffer "^6.0.3" + iso-constants "^0.1.2" + it-concat "^2.0.0" + it-reader "^3.0.0" + p-defer "^3.0.0" + +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== + dependencies: + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" + iterate-iterator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" @@ -3067,6 +3568,13 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json-text-sequence@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.3.0.tgz#6603e0ee45da41f949669fd18744b97fb209e6ce" + integrity sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA== + dependencies: + "@sovpro/delimited-stream" "^1.1.0" + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -3081,6 +3589,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +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: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonschema@^1.2.4: version "1.4.0" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" @@ -3199,6 +3716,11 @@ log-symbols@4.0.0: dependencies: chalk "^4.0.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== + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -3256,6 +3778,13 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + merge2@^1.2.3, merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -3365,7 +3894,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.4: +mkdirp@*: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -3433,6 +3962,26 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiaddr-to-uri@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-7.0.0.tgz#9bed2361e3eb7c18507e35204067bef98db8ac8e" + integrity sha512-VbscDpLcbV0m25tJqfnZSfbjVUuNlPa4BbD5l/7me1t0lc3SWI0XAoO5E/PNJF0e1qUlbdq7yjVFEQjUT+9r0g== + dependencies: + multiaddr "^9.0.1" + +multiaddr@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-9.0.1.tgz#4a3b5a21b37e4df5b443f2ca957304ea5bfd4604" + integrity sha512-fubxMjVoRPcz3GYBb63Z6ADCY6BoqezbnL2o8owDcfYqhwW61oFtIlsZGiNKIVC2Fk1Od5rf/3z34QSGJFT/uA== + dependencies: + cids "^1.0.0" + dns-over-http-resolver "^1.0.0" + err-code "^3.0.1" + is-ip "^3.1.0" + multibase "^4.0.2" + uint8arrays "^2.1.3" + varint "^6.0.0" + multibase@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" @@ -3441,6 +3990,13 @@ multibase@^0.7.0: base-x "^3.0.8" buffer "^5.5.0" +multibase@^4.0.1, multibase@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.4.tgz#55ef53e6acce223c5a09341a8a3a3d973871a577" + integrity sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg== + dependencies: + "@multiformats/base-x" "^4.0.1" + multibase@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" @@ -3464,6 +4020,14 @@ multicodec@^1.0.0: buffer "^5.6.0" varint "^5.0.0" +multicodec@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-3.0.1.tgz#94e043847ee11fcce92487609ac9010429a95e31" + integrity sha512-Y6j3wiPojvkF/z6KFIGt84KdJdP2oILEdzc/3YbD3qQ3EerhqtYlfsZTPPNVoCCxNZZdzIpCKrdYFSav17sIrQ== + dependencies: + uint8arrays "^2.1.3" + varint "^5.0.2" + multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" @@ -3473,6 +4037,32 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +multihashes@^4.0.1, multihashes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-4.0.2.tgz#d76aeac3a302a1bed9fe1ec964fb7a22fa662283" + integrity sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ== + dependencies: + multibase "^4.0.1" + uint8arrays "^2.1.3" + varint "^5.0.2" + +multihashing-async@^2.0.0, multihashing-async@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/multihashing-async/-/multihashing-async-2.1.2.tgz#9ed68f183bde70e0416b166bbc59a0c0623a0ede" + integrity sha512-FTPNnWWxwIK5dXXmTFhySSF8Fkdqf7vzqpV09+RWsmfUhrsL/b3Arg3+bRrBnXTtjxm3JRGI3wSAtQHL0QCxhQ== + dependencies: + blakejs "^1.1.0" + err-code "^3.0.0" + js-sha3 "^0.8.0" + multihashes "^4.0.1" + murmurhash3js-revisited "^3.0.0" + uint8arrays "^2.1.3" + +murmurhash3js-revisited@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz#6bd36e25de8f73394222adc6e41fa3fac08a5869" + integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -3488,6 +4078,21 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.20: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + +native-abort-controller@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/native-abort-controller/-/native-abort-controller-1.0.3.tgz#35974a2e189c0d91399c8767a989a5bf058c1435" + integrity sha512-fd5LY5q06mHKZPD5FmMrn7Lkd2H018oBGKNOAdLpctBDEPFKsfJ1nX9ke+XRa8PEJJpjqrpQkGjq2IZ27QNmYA== + +native-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb" + integrity sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3525,6 +4130,11 @@ node-emoji@^1.10.0: dependencies: lodash.toarray "^4.4.0" +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-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" @@ -3725,6 +4335,19 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -3812,6 +4435,11 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-duration@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.0.0.tgz#8605651745f61088f6fb14045c887526c291858c" + integrity sha512-X4kUkCTHU1N/kEbwK9FpUJ0UZQa90VzeczfS704frR30gljxDG0pSziws06XlK+CGRSo/1wtG1mFIdBFQTMQNw== + parse-headers@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" @@ -4012,6 +4640,25 @@ promise.allsettled@1.0.2: function-bind "^1.1.1" iterate-value "^1.0.0" +protobufjs@^6.10.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b" + integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw== + 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" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -4079,6 +4726,11 @@ querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystring@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4126,7 +4778,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -4142,6 +4794,13 @@ readdirp@~3.4.0: dependencies: picomatch "^2.2.1" +receptacle@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" + integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A== + dependencies: + ms "^2.1.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -4166,7 +4825,7 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -request@^2.79.0, request@^2.85.0: +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== @@ -4245,6 +4904,11 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +retimer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca" + integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -4311,7 +4975,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", 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== @@ -4485,7 +5149,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.3: +shelljs@^0.8.3, shelljs@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== @@ -4669,11 +5333,23 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stream-to-it@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.3.tgz#b9320ceb26a51b313de81036d4354d9b657f4d2d" + integrity sha512-xaK9EjPtLox5rrC7YLSBXSanTtUJN/lzJlMFvy9VaROmnyvy0U/X6m2uMhXPJRn3g3M9uOSIzTszW7BPiWSg9w== + dependencies: + get-iterator "^1.0.2" + 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" @@ -4874,6 +5550,14 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timeout-abort-controller@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz#2c3c3c66f13c783237987673c276cbd7a9762f29" + integrity sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ== + dependencies: + abort-controller "^3.0.0" + retimer "^2.0.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4906,16 +5590,15 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -truffle-flattener@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/truffle-flattener/-/truffle-flattener-1.5.0.tgz#c358fa3e5cb0a663429f7912a58c4f0879414e64" - integrity sha512-vmzWG/L5OXoNruMV6u2l2IaheI091e+t+fFCOR9sl46EE3epkSRIwGCmIP/EYDtPsFBIG7e6exttC9/GlfmxEQ== +truffle-plugin-verify@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/truffle-plugin-verify/-/truffle-plugin-verify-0.5.8.tgz#9564c2860016ede93f36249a11ec3147fa750bad" + integrity sha512-q45RI54mDu+8V5vbWfO4sIdUQqDX2AYEkr4T48CijQIIRlWYGDMFkw577tgSbf2yzmMueAKOjTxLTHX0osR+bQ== dependencies: - "@resolver-engine/imports-fs" "^0.2.2" - "@solidity-parser/parser" "^0.8.0" - find-up "^2.1.0" - mkdirp "^1.0.4" - tsort "0.0.1" + axios "^0.21.1" + cli-logger "^0.5.40" + delay "^5.0.0" + querystring "^0.2.1" truffle@^5.1.55: version "5.1.60" @@ -4941,11 +5624,6 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -5012,6 +5690,13 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" integrity sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== +uint8arrays@^2.0.5, uint8arrays@^2.1.3, uint8arrays@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.1.5.tgz#9e6e6377a9463d5eba4620a3f0450f7eb389a351" + integrity sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA== + dependencies: + multibase "^4.0.1" + ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -5027,6 +5712,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +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" @@ -5130,11 +5820,16 @@ validator@^13.0.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.5.2.tgz#c97ae63ed4224999fb6f42c91eaca9567fe69a46" integrity sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ== -varint@^5.0.0: +varint@^5.0.0, varint@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" From ce49881b7eb7f099606aa16e8a2d6fccd7c21691 Mon Sep 17 00:00:00 2001 From: Kirill Fedoseev Date: Sat, 29 May 2021 14:15:09 +0700 Subject: [PATCH 2/2] Robust way of using TransferSingle mint for first mint ever (#36) --- contracts/tokens/ERC1155BridgeToken.sol | 25 ++++++++++++++++-- e2e-tests/run.js | 26 ++++++++++++------- .../erc1155/bridgeNativeForeignTokens.js | 2 +- .../bridgeNativeForeignTokensToOtherUser.js | 2 +- .../erc1155/bridgeNativeHomeTokens.js | 2 +- .../bridgeNativeHomeTokensToOtherUser.js | 2 +- test/omnibridge_nft/common.test.js | 16 ++++++++++++ 7 files changed, 60 insertions(+), 15 deletions(-) diff --git a/contracts/tokens/ERC1155BridgeToken.sol b/contracts/tokens/ERC1155BridgeToken.sol index fb8a219..9f67c6c 100644 --- a/contracts/tokens/ERC1155BridgeToken.sol +++ b/contracts/tokens/ERC1155BridgeToken.sol @@ -19,6 +19,8 @@ contract ERC1155BridgeToken is ERC1155, IBurnableMintableERC1155Token { address public bridgeContract; + bool private hasAlreadyMinted; + constructor( string memory _name, string memory _symbol, @@ -78,7 +80,26 @@ contract ERC1155BridgeToken is ERC1155, IBurnableMintableERC1155Token { uint256[] memory _tokenIds, uint256[] memory _values ) external override onlyBridge { - _mintBatch(_to, _tokenIds, _values, new bytes(0)); + if (_tokenIds.length == 1 && _values.length == 1) { + _mint(_to, _tokenIds[0], _values[0], new bytes(0)); + } else { + // Next few lines ensure that the first mint ever happened in his token contract will performed using TransferSingle event + // Otherwise, NFT marketplaces have issues with indexing bridged token data. + // On first mint ever (when hasAlreadyMinted is false), last token id from the list is minted using TransferSingle. + // All over tokens from the list are minted using TransferBatch event. + // All subsequent operations will always use TransferBatch for operations involving more than 1 token id. + if (!hasAlreadyMinted) { + require(_tokenIds.length > 1 && _tokenIds.length == _values.length); + uint256 len = _tokenIds.length - 1; + _mint(_to, _tokenIds[len], _values[len], new bytes(0)); + assembly { + mstore(_tokenIds, len) // _tokenIds.pop() + mstore(_values, len) // _values.pop() + } + } + _mintBatch(_to, _tokenIds, _values, new bytes(0)); + } + hasAlreadyMinted = true; } /** @@ -149,6 +170,6 @@ contract ERC1155BridgeToken is ERC1155, IBurnableMintableERC1155Token { uint64 patch ) { - return (1, 0, 1); + return (1, 1, 0); } } diff --git a/e2e-tests/run.js b/e2e-tests/run.js index 4f2de30..d29c6c4 100644 --- a/e2e-tests/run.js +++ b/e2e-tests/run.js @@ -179,30 +179,36 @@ async function makeExecuteManually(homeAMB, foreignAMB, web3, homeBlockNumber) { } } -function makeCheckTransfer(web3, isERC1155 = false) { +function makeCheckTransfer(web3, isERC1155 = false, isBatch = false) { + const erc1155EventName = isBatch ? 'TransferBatch' : 'TransferSingle' const eventABI = isERC1155 - ? ERC1155.abi.find((e) => e.type === 'event' && e.name === 'TransferBatch') + ? ERC1155.abi.find((e) => e.type === 'event' && e.name === erc1155EventName) : ERC721.abi.find((e) => e.type === 'event' && e.name === 'Transfer' && e.inputs.length === 3) const sig = web3.eth.abi.encodeEventSignature(eventABI) - const eventToStr = isERC1155 + const erc1155EventToStr = isBatch ? (e) => `- TransferBatch(${e.operator}, ${e.from}, ${e.to}, [${e.ids.join(', ')}], [${e.values.join(', ')}])` - : (e) => `- Transfer(${e.from}, ${e.to}, ${e.tokenId})` + : (e) => `- TransferSingle(${e.operator}, ${e.from}, ${e.to}, ${e.id}, ${e.value})` + const eventToStr = isERC1155 ? erc1155EventToStr : (e) => `- Transfer(${e.from}, ${e.to}, ${e.tokenId})` return async (txHash, token, from, to, tokenId) => { const tokenAddr = toAddress(token) const fromAddr = toAddress(from) const toAddr = toAddress(to) - const str = isERC1155 + const erc1155Str = isBatch ? `TransferBatch(${fromAddr}, ${fromAddr}, ${toAddr}, [${tokenId}], [1])` - : `Transfer(${fromAddr}, ${toAddr}, ${tokenId})` + : `TransferSingle(${fromAddr}, ${fromAddr}, ${toAddr}, ${tokenId}, 1)` + const str = isERC1155 ? erc1155Str : `Transfer(${fromAddr}, ${toAddr}, ${tokenId})` console.log(`Checking if transaction has the required ${str}`) const { logs } = await web3.eth.getTransactionReceipt(txHash) const transfers = logs .filter((log) => log.topics[0] === sig && log.address === tokenAddr) .map((log) => web3.eth.abi.decodeLog(eventABI.inputs, log.data, log.topics.slice(1))) assert.ok(transfers.length > 0, `No transfers are found for the token ${tokenAddr}`) - const checkTransfer = isERC1155 + const checkErc1155Transfer = isBatch ? (e) => e.from === fromAddr && e.to === toAddr && e.ids[0] === tokenId.toString() && e.values[0] === '1' + : (e) => e.from === fromAddr && e.to === toAddr && e.id === tokenId.toString() && e.value === '1' + const checkTransfer = isERC1155 + ? checkErc1155Transfer : (e) => e.from === fromAddr && e.to === toAddr && e.tokenId === tokenId.toString() assert.ok( transfers.some(checkTransfer), @@ -353,7 +359,8 @@ async function createEnv(web3Home, web3Foreign) { waitUntilProcessed: makeWaitUntilProcessed(homeAMB, 'AffirmationCompleted', homeBlockNumber), withDisabledExecution: makeWithDisabledExecution(homeMediator, owner), checkTransferERC721: makeCheckTransfer(web3Home, false), - checkTransferERC1155: makeCheckTransfer(web3Home, true), + checkTransferERC1155: makeCheckTransfer(web3Home, true, false), + checkTransferBatchERC1155: makeCheckTransfer(web3Home, true, true), mintERC721: makeMint(homeTokenERC721, users[0], false), mintERC1155: makeMint(homeTokenERC1155, users[0], true), relayTokenERC721: makeRelayToken(homeMediator, users[0], false), @@ -370,7 +377,8 @@ async function createEnv(web3Home, web3Foreign) { waitUntilProcessed: makeWaitUntilProcessed(foreignAMB, 'RelayedMessage', foreignBlockNumber), withDisabledExecution: makeWithDisabledExecution(foreignMediator, owner), checkTransferERC721: makeCheckTransfer(web3Foreign, false), - checkTransferERC1155: makeCheckTransfer(web3Foreign, true), + checkTransferERC1155: makeCheckTransfer(web3Foreign, true, false), + checkTransferBatchERC1155: makeCheckTransfer(web3Foreign, true, true), mintERC721: makeMint(foreignTokenERC721, users[0], false), mintERC1155: makeMint(foreignTokenERC1155, users[0], true), relayTokenERC721: makeRelayToken(foreignMediator, users[0], false), diff --git a/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokens.js b/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokens.js index 998afc7..44d6d37 100644 --- a/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokens.js +++ b/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokens.js @@ -17,7 +17,7 @@ async function run({ foreign, home, users }) { const receipt2 = await home.relayTokenERC1155(bridgedToken, id) const relayTxHash2 = await foreign.waitUntilProcessed(receipt2) - await foreign.checkTransferERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) + await foreign.checkTransferBatchERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) } module.exports = { diff --git a/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokensToOtherUser.js b/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokensToOtherUser.js index d21d0ff..5702c52 100644 --- a/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokensToOtherUser.js +++ b/e2e-tests/scenarios/erc1155/bridgeNativeForeignTokensToOtherUser.js @@ -17,7 +17,7 @@ async function run({ foreign, home, users }) { const receipt2 = await home.relayTokenERC1155(bridgedToken, id, { to: users[0], from: users[1] }) const relayTxHash2 = await foreign.waitUntilProcessed(receipt2) - await foreign.checkTransferERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) + await foreign.checkTransferBatchERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) } module.exports = { diff --git a/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokens.js b/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokens.js index 8c196d7..b5cd645 100644 --- a/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokens.js +++ b/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokens.js @@ -17,7 +17,7 @@ async function run({ foreign, home, users }) { const receipt2 = await foreign.relayTokenERC1155(bridgedToken, id) const relayTxHash2 = await home.waitUntilProcessed(receipt2) - await home.checkTransferERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) + await home.checkTransferBatchERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) } module.exports = { diff --git a/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokensToOtherUser.js b/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokensToOtherUser.js index 95dd31a..e174307 100644 --- a/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokensToOtherUser.js +++ b/e2e-tests/scenarios/erc1155/bridgeNativeHomeTokensToOtherUser.js @@ -17,7 +17,7 @@ async function run({ foreign, home, users }) { const receipt2 = await foreign.relayTokenERC1155(bridgedToken, id, { to: users[0], from: users[1] }) const relayTxHash2 = await home.waitUntilProcessed(receipt2) - await home.checkTransferERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) + await home.checkTransferBatchERC1155(relayTxHash2, erc1155Token, mediator, users[0], id) } module.exports = { diff --git a/test/omnibridge_nft/common.test.js b/test/omnibridge_nft/common.test.js index 9bcdc3b..edb7367 100644 --- a/test/omnibridge_nft/common.test.js +++ b/test/omnibridge_nft/common.test.js @@ -1729,6 +1729,22 @@ function runTests(accounts, isHome) { expect(event[1].returnValues.values).to.be.eql(['1', '3']) expect(event[1].returnValues.messageId).to.be.equal(exampleMessageId) }) + + it('should mint single token', async () => { + const data = handleBridgedERC1155({ tokenIds: [3], values: [5] }) + expect(await executeMessageCall(exampleMessageId, data)).to.be.equal(true) + + expect(await deployedToken.balanceOf(user, 3)).to.be.bignumber.equal('5') + expect(await contract.mediatorOwns(deployedToken.address, 3)).to.be.bignumber.equal('0') + + const event = await getEvents(contract, { event: 'TokensBridged' }) + expect(event.length).to.be.equal(2) + expect(event[1].returnValues.token).to.be.equal(deployedToken.address) + expect(event[1].returnValues.recipient).to.be.equal(user) + expect(event[1].returnValues.tokenIds).to.be.eql(['3']) + expect(event[1].returnValues.values).to.be.eql(['5']) + expect(event[1].returnValues.messageId).to.be.equal(exampleMessageId) + }) }) }) })