diff --git a/docker/README.md b/docker/README.md index 3b8899ad55..26d5e46679 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,45 +1,139 @@ -## Build with Docker & Docker Compose +## Nym Validator -Currently you can build and run locally in a Docker containers the following components of the Nym Privacy Platform: +This contains the configuration needed to run a Nym validator using Docker -* One genesis validator -* Any number of secondary validators -* A contract uploader, that uploads the contract built from the local sources -* The web wallet application, accessible on port 3000 -* The block explorer application, accessible on port 3080 -* The network explorer application, accessible on port 3040, for registered users +> **SECURITY**: This runs the validator as the root user inside the container for simplicity and development purposes. This setup should NOT be used in any other fashion. -### Running +### Initial Setup -The following commands need to be run from the root of the Nym git project. - -To build the entire dockerized environment, run the following command: +Before building and running the validator, you'll need to create the required directories: ``` -PERSONAL_TOKEN=[network explorer token] docker-compose build +# Create required directories +mkdir -p data/validator data/addresses +chmod -R 777 data ``` -or build each service separately, as changes are made to their relevant source code. -**Note** network-explorer build time is currently very high, so building it more than once is not advisable. +### Running on Apple (Mx) Macs with Colima -To start the dockerized environment, run the following command: +When running on Apple Silicon Macs, we are using Colima with x86_64 emulation to properly run the validator: +1. Install Colima ``` -METEOR_SETTINGS=$(cat docker/block_explorer/settings.json) docker-compose up -d --scale=secondary_validator=3 +brew install colima ``` -**Note**: The `secondary_validator=3` can take any other number as value, depending on the desired setup. - -The web wallet interface will become available at `localhost:3000`. - -The mnemonic needed to connect to the admin user, which also has a pre-added number of tokens, can be obtained by running: - +2. Set up a Colima VM with x86_64 architecture and Rosetta support: ``` -docker logs nym_mnemonic_echo_1 +# Create a Colima VM with x86_64 architecture +colima start nym-validator --arch x86_64 --cpu 4 --memory 8 --disk 20 --vm-type=vz --vz-rosetta --mount-type=virtiofs ``` -To stop the dockerized environment, run: +3. Build and start the validator: +``` +# Make sure you're using the Colima context +docker context use colima-nym-validator + +# Build the validator +docker-compose build validator + +# Start the validator +docker-compose up -d validator +``` + +### Standard Operation (Intel/AMD x86_64 Systems) + +For standard x86_64 systems: + +``` +# Build the validator +docker-compose build validator + +# Start the validator +docker-compose up -d validator +``` + +The genesis validator will be initialized with the network configuration defined in the `docker-compose.yml` file. + +### Managing the Validator + +To check the validator logs: + +``` +docker logs -f validator +``` + +To get the admin mnemonic: + +``` +docker exec validator cat /root/output/node_admin_mnemonic +``` + +To stop the validator: ``` docker-compose down ``` + +### Terminating and Cleaning Up Validator Data + +If you need to completely terminate your validator and remove all associated data: + +``` +# Stop the containers +docker-compose down + +# Remove the volumes +docker-compose down -v + +# Delete the data directories +rm -rf data + +# If you want to start fresh, recreate the directories +mkdir -p data/validator/config data/addresses +chmod -R 777 data +``` + +This will completely remove all blockchain state, keys, and configuration, allowing you to start with a clean validator instance + +### Using nym-cli for Smart Contract Operations + +The nym-cli utility can be used to manage and execute WASM smart contracts. You can access the CLI from within the validator container: + +``` +docker exec -it validator ./nym-cli cosmwasm --help +``` + +#### Available Commands: + +- **upload**: Upload a smart contract WASM blob +- **init**: Init a WASM smart contract +- **generate-init-message**: Generate an instantiate message +- **migrate**: Migrate a WASM smart contract +- **execute**: Execute a WASM smart contract method +- **raw-contract-state**: Obtain raw contract state of a cosmwasm smart contract + +#### Example Usage: + +To upload a contract: + +``` +docker exec -it validator ./nym-cli cosmwasm upload \ + --mnemonic $(cat /root/output/node_admin_mnemonic) \ + --wasm-file /path/to/contract.wasm +``` + +To initialize a contract: + +``` +docker exec -it validator ./nym-cli cosmwasm init \ + --mnemonic $(cat /root/output/node_admin_mnemonic) \ + --code-id \ + --init-msg '{"key": "value"}' +``` + +For more detailed options, use the help command: + +``` +docker exec -it validator ./nym-cli cosmwasm --help +``` \ No newline at end of file diff --git a/docker/block_explorer/settings.json b/docker/block_explorer/settings.json deleted file mode 100644 index 6b5e8558c0..0000000000 --- a/docker/block_explorer/settings.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "public":{ - "chainName": "Nym", - "chainId": "nymnet", - "slashingWindow": 10000, - "uptimeWindow": 250, - "initialPageSize": 30, - "secp256k1": false, - "bech32PrefixAccAddr": "punk", - "bech32PrefixAccPub": "punkpub", - "bech32PrefixValAddr": "punkvaloper", - "bech32PrefixValPub": "punkvaloperpub", - "bech32PrefixConsAddr": "punkvalcons", - "bech32PrefixConsPub": "punkvalconspub", - "bondDenom": "punk", - "powerReduction": 1000000, - "coins": [ - { - "denom": "upunk", - "displayName": "PUNK", - "fraction": 1000000 - }, - { - "denom": "punk", - "displayName": "PUNK", - "fraction": 1000000 - } - ], - "ledger":{ - "coinType": 118, - "appName": "punk", - "appVersion": "2.16.0", - "gasPrice": 0.025 - }, - "modules": { - "bank": true, - "supply": true, - "minting": false, - "gov": true, - "distribution": false - }, - "coingeckoId": "punk", - "networks": "https://gist.githubusercontent.com/kwunyeung/8be4598c77c61e497dfc7220a678b3ee/raw/bd-networks.json", - "banners": false - }, - "remote":{ - "rpc":"http://genesis_validator:26657", - "api":"http://genesis_validator:1317" - }, - "debug": { - "startTimer": true - }, - "params":{ - "startHeight": 0, - "defaultBlockTime": 5000, - "validatorUpdateWindow": 300, - "blockInterval": 15000, - "transactionsInterval": 18000, - "keybaseFetchingInterval": 18000000, - "consensusInterval": 1000, - "statusInterval":7500, - "signingInfoInterval": 1800000, - "proposalInterval": 5000, - "missedBlocksInterval": 60000, - "delegationInterval": 900000 - } -} - - diff --git a/docker/explorer/Dockerfile b/docker/explorer/Dockerfile deleted file mode 100644 index d6a100419f..0000000000 --- a/docker/explorer/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:16 - -COPY ./setup.sh /setup.sh -CMD /setup.sh diff --git a/docker/explorer/setup.sh b/docker/explorer/setup.sh deleted file mode 100755 index 38632b63b8..0000000000 --- a/docker/explorer/setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -git clone https://github.com/nymtech/nym.git - -mkdir /explorer-copy -cp -r nym/explorer/* /explorer-copy - -cd /explorer-copy - -npm install -#baseUrl -sed -i 's/https:\/\/testnet-milhon-explorer.nymtech.net\//http:\/\/localhost:3080/' ./src/api/constants.ts - -#master validator -sed -i 's/https:\/\/testnet-milhon-validator1.nymtech.net/http:\/\/localhost:26657/' ./src/api/constants.ts - -#big dipper url -sed -i 's/https:\/\/testnet-milhon-blocks.nymtech.net\//http:\/\/localhost:3080/' ./src/api/constants.ts - -nohup npm run start \ No newline at end of file diff --git a/docker/mixnet_contract/Dockerfile b/docker/mixnet_contract/Dockerfile deleted file mode 100644 index 018338fd6d..0000000000 --- a/docker/mixnet_contract/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM rust -RUN rustup target add wasm32-unknown-unknown -CMD cd nym/contracts/mixnet && RUSTFLAGS='-C link-arg=-s' cargo build --release --target wasm32-unknown-unknown - diff --git a/docker/mnemonic_echo/Dockerfile b/docker/mnemonic_echo/Dockerfile deleted file mode 100644 index 110a9cdaef..0000000000 --- a/docker/mnemonic_echo/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM alpine -COPY ./entrypoint.sh /entrypoint.sh -CMD /entrypoint.sh diff --git a/docker/mnemonic_echo/entrypoint.sh b/docker/mnemonic_echo/entrypoint.sh deleted file mode 100755 index 8c8a94aec3..0000000000 --- a/docker/mnemonic_echo/entrypoint.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -# Wait for the mnemonic(s) to be generated -while ! [ -s /genesis_volume/genesis_mnemonic ]; do - sleep 1 -done - -while ! [ -s /genesis_volume/secondary_mnemonic ]; do - sleep 1 -done - -echo "This is the current genesis mnemonic:" -cat /genesis_volume/genesis_mnemonic - -echo "This is the current secondary mnemonic:" -cat /genesis_volume/secondary_mnemonic diff --git a/docker/typescript_client/Dockerfile b/docker/typescript_client/Dockerfile deleted file mode 100644 index a886a06933..0000000000 --- a/docker/typescript_client/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM node -RUN apt update && apt install -y netcat -COPY entrypoint.sh /entrypoint.sh -CMD /entrypoint.sh diff --git a/docker/typescript_client/entrypoint.sh b/docker/typescript_client/entrypoint.sh deleted file mode 100755 index 14de8384db..0000000000 --- a/docker/typescript_client/entrypoint.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -cd /nym/clients/validator -yarn install -yarn build - -cd /nym/docker/typescript_client/upload_contract -npm install - -# Wait until the mnemonic is created -while ! [ -s /genesis_volume/genesis_mnemonic ]; do - sleep 1 -done - -# Wait until the validator opens its port -while ! nc -z genesis_validator 26657; do - sleep 1 -done - -chmod 777 /contract_volume -npx ts-node upload-wasm.ts diff --git a/docker/typescript_client/upload_contract/package-lock.json b/docker/typescript_client/upload_contract/package-lock.json deleted file mode 100644 index 81b35e952b..0000000000 --- a/docker/typescript_client/upload_contract/package-lock.json +++ /dev/null @@ -1,2116 +0,0 @@ -{ - "name": "nym-driver-example", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "nym-driver-example", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@nymproject/nym-validator-client": "0.18.0", - "@types/node": "^14.14.22", - "nodemon": "^2.0.20", - "save-dev": "0.0.1-security", - "tasktimer": "^3.0.0", - "ts-node": "^9.1.1" - }, - "devDependencies": { - "@tsconfig/recommended": "^1.0.1", - "prettier": "^2.8.7", - "typescript": "^4.1.3" - } - }, - "../../../clients/validator": { - "name": "@nymproject/nym-validator-client", - "version": "0.19.0", - "extraneous": true, - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/cosmwasm-stargate": "^0.27.0-rc2", - "@cosmjs/crypto": "^0.27.0-rc2", - "@cosmjs/math": "^0.27.0-rc2", - "@cosmjs/proto-signing": "^0.27.0-rc2", - "@cosmjs/stargate": "^0.27.0-rc2", - "@cosmjs/tendermint-rpc": "^0.27.0-rc2", - "axios": "^0.21.1", - "cosmjs-types": "^0.4.0" - }, - "devDependencies": { - "@types/chai": "^4.2.15", - "@types/expect": "^24.3.0", - "@types/mocha": "^8.2.1", - "@typescript-eslint/eslint-plugin": "^5.7.0", - "@typescript-eslint/parser": "^5.7.0", - "chai": "^4.2.0", - "eslint": "^7.18.0", - "eslint-config-airbnb": "^19.0.2", - "eslint-config-airbnb-typescript": "^16.1.0", - "eslint-config-prettier": "^8.3.0", - "eslint-import-resolver-root-import": "^1.0.4", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-mocha": "^10.0.3", - "eslint-plugin-prettier": "^4.0.0", - "mocha": "^8.2.1", - "moq.ts": "^7.2.0", - "nyc": "^15.1.0", - "prettier": "^2.5.1", - "ts-mocha": "^8.0.0", - "typedoc": "^0.20.27", - "typescript": "^4.1.3" - } - }, - "node_modules/@confio/ics23": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", - "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", - "dependencies": { - "@noble/hashes": "^1.0.0", - "protobufjs": "^6.8.8" - } - }, - "node_modules/@cosmjs/amino": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.25.6.tgz", - "integrity": "sha512-9dXN2W7LHjDtJUGNsQ9ok0DfxeN3ca/TXnxCR3Ikh/5YqBqxI8Gel1J9PQO9L6EheYyh045Wff4bsMaLjyEeqQ==", - "dependencies": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6" - } - }, - "node_modules/@cosmjs/cosmwasm-launchpad": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-launchpad/-/cosmwasm-launchpad-0.25.6.tgz", - "integrity": "sha512-rzpYg/A8tvXbY6p89LabPB1mqCtTUv+33nN+s+VWMH0oOl0LSIgLE0yIT61kwTaf2dWQvRVeFaiRLFC72/w/zw==", - "dependencies": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/launchpad": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "pako": "^2.0.2" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.25.6.tgz", - "integrity": "sha512-STaxur5Xk5hqndLEztpa1TqvpdQyg2xD//2ZNFw2fgxf1JQtP0RfFbA3bnBkYwbGARx5cnng8QeZmSUcXnTVxA==", - "dependencies": { - "@cosmjs/amino": "^0.25.6", - "@cosmjs/cosmwasm-launchpad": "^0.25.6", - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/proto-signing": "^0.25.6", - "@cosmjs/stargate": "^0.25.6", - "@cosmjs/tendermint-rpc": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "long": "^4.0.0", - "pako": "^2.0.2", - "protobufjs": "~6.10.2" - } - }, - "node_modules/@cosmjs/crypto": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.25.6.tgz", - "integrity": "sha512-ec+YcQLrg2ibcxtNrh4FqQnG9kG9IE/Aik2NH6+OXQdFU/qFuBTxSFcKDgzzBOChwlkXwydllM9Jjbp+dgIzRw==", - "dependencies": { - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "bip39": "^3.0.2", - "bn.js": "^4.11.8", - "elliptic": "^6.5.3", - "js-sha3": "^0.8.0", - "libsodium-wrappers": "^0.7.6", - "ripemd160": "^2.0.2", - "sha.js": "^2.4.11" - } - }, - "node_modules/@cosmjs/encoding": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.25.6.tgz", - "integrity": "sha512-0imUOB8XkUstI216uznPaX1hqgvLQ2Xso3zJj5IV5oJuNlsfDj9nt/iQxXWbJuettc6gvrFfpf+Vw2vBZSZ75g==", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "node_modules/@cosmjs/json-rpc": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.25.6.tgz", - "integrity": "sha512-Mn9og3/IEzC6jWoYXs0ONqFJc8HxVjXzrZPLgaRRdMZEUBvctxdhynau1wbE4LdkYQHbu4aiRu1q1jMYGFAj4A==", - "dependencies": { - "@cosmjs/stream": "^0.25.6", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/launchpad": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/launchpad/-/launchpad-0.25.6.tgz", - "integrity": "sha512-4Yhn4cX50UE6jZz/hWqKeeCmvrlrz0BBwOdYX/29k25FqP+oLAow1xKm6UxgYuuAq8Pg/bUvswxSqwegZJTb6g==", - "dependencies": { - "@cosmjs/amino": "^0.25.6", - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "axios": "^0.21.1", - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/@cosmjs/math": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.25.6.tgz", - "integrity": "sha512-Fmyc9FJ8KMU34n7rdapMJrT/8rx5WhMw2F7WLBu7AVLcBh0yWsXIcMSJCoPHTOnMIiABjXsnrrwEaLrOOBfu6A==", - "dependencies": { - "bn.js": "^4.11.8" - } - }, - "node_modules/@cosmjs/proto-signing": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.25.6.tgz", - "integrity": "sha512-JpQ+Vnv9s6i3x8f3Jo0lJZ3VMnj3R5sMgX+8ti1LtB7qEYRR85qbDrEG9hDGIKqJJabvrAuCHnO6hYi0vJEJHA==", - "dependencies": { - "@cosmjs/amino": "^0.25.6", - "long": "^4.0.0", - "protobufjs": "~6.10.2" - } - }, - "node_modules/@cosmjs/socket": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.25.6.tgz", - "integrity": "sha512-hu+pW3Fy0IuhstXgxnZ2Iq0RUnGYoTWfqrxbTsgXBJge4MpEQs2YwGXgJZPMJXedBQivG0tU3r/Wvam0EWuRkQ==", - "dependencies": { - "@cosmjs/stream": "^0.25.6", - "isomorphic-ws": "^4.0.1", - "ws": "^7", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/stargate": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.25.6.tgz", - "integrity": "sha512-+LM1sK6vGuotJF9fBCBlaDL/yJhfzCV6KbsaWt3teHAKZhKYOd/9mKGiB4H9bfg4h3r+e+FZGiNkH/mdXkcgEw==", - "dependencies": { - "@confio/ics23": "^0.6.3", - "@cosmjs/amino": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/proto-signing": "^0.25.6", - "@cosmjs/stream": "^0.25.6", - "@cosmjs/tendermint-rpc": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "long": "^4.0.0", - "protobufjs": "~6.10.2" - } - }, - "node_modules/@cosmjs/stream": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.25.6.tgz", - "integrity": "sha512-2mXIzf+WaFd+GSrRaJJETVXeZoC5sosuKChFERxSY8zXQ/f3OaG9J6m+quHpPbU3nAIEtnF1jgBVqJiD+NKwGQ==", - "dependencies": { - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/tendermint-rpc": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.25.6.tgz", - "integrity": "sha512-wsvxTI7DReWJu+SVlXLblzh5NJppnh1mljuaTHodMf7HBxrXdbcCcBAO8oMbMgEqOASEY5G+z51wktxhrn9RtA==", - "dependencies": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/json-rpc": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/socket": "^0.25.6", - "@cosmjs/stream": "^0.25.6", - "axios": "^0.21.1", - "readonly-date": "^1.0.0", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/utils": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.25.6.tgz", - "integrity": "sha512-ofOYiuxVKNo238vCPPlaDzqPXy2AQ/5/nashBo5rvPZJkxt9LciGfUEQWPCOb1BIJDNx2Dzu0z4XCf/dwzl0Dg==" - }, - "node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" - }, - "node_modules/@nymproject/nym-validator-client": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@nymproject/nym-validator-client/-/nym-validator-client-0.18.0.tgz", - "integrity": "sha512-FO1T15S2BJVuMoPA2yOaH40aD3hKJPKJVyX5ix7eJEbBWIdsYNoVeVc/soHhaAU1FIy2uU0G/FZQkaUYJGGb7Q==", - "dependencies": { - "@cosmjs/cosmwasm-stargate": "^0.25.5", - "@cosmjs/math": "^0.25.5", - "@cosmjs/proto-signing": "^0.25.5", - "@cosmjs/stargate": "^0.25.5", - "axios": "^0.21.1" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "node_modules/@tsconfig/recommended": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.1.tgz", - "integrity": "sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/libsodium": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", - "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" - }, - "node_modules/libsodium-wrappers": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", - "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", - "dependencies": { - "libsodium": "^0.7.0" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/protobufjs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.3.tgz", - "integrity": "sha512-yvAslS0hNdBhlSKckI4R1l7wunVilX66uvrjzE4MimiAt7/qw1nLpMhZrn/ObuUTM/c3Xnfl01LYMdcSJe6dwg==", - "hasInstallScript": true, - "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" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/protobufjs/node_modules/@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readonly-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readonly-date/-/readonly-date-1.0.0.tgz", - "integrity": "sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==" - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/save-dev": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/save-dev/-/save-dev-0.0.1-security.tgz", - "integrity": "sha512-k6knZTDNK8PKKbIqnvxiOveJinuw2LcQjqDoaorZWP9M5AR2EPsnpDeSbeoZZ0pHr5ze1uoaKdK8NBGQrJ34Uw==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tasktimer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tasktimer/-/tasktimer-3.0.0.tgz", - "integrity": "sha512-Fx2Zw4FFM/gc9cY4Iodo9UwC9yFl7fIU3ay/wqq0+E5WT587aZlmjCW2yLCHRVIwzcSig4tMqIh4vqxOcyXr9A==", - "dependencies": { - "eventemitter3": "^4.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xstream": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", - "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", - "dependencies": { - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@confio/ics23": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", - "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", - "requires": { - "@noble/hashes": "^1.0.0", - "protobufjs": "^6.8.8" - } - }, - "@cosmjs/amino": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.25.6.tgz", - "integrity": "sha512-9dXN2W7LHjDtJUGNsQ9ok0DfxeN3ca/TXnxCR3Ikh/5YqBqxI8Gel1J9PQO9L6EheYyh045Wff4bsMaLjyEeqQ==", - "requires": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6" - } - }, - "@cosmjs/cosmwasm-launchpad": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-launchpad/-/cosmwasm-launchpad-0.25.6.tgz", - "integrity": "sha512-rzpYg/A8tvXbY6p89LabPB1mqCtTUv+33nN+s+VWMH0oOl0LSIgLE0yIT61kwTaf2dWQvRVeFaiRLFC72/w/zw==", - "requires": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/launchpad": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "pako": "^2.0.2" - } - }, - "@cosmjs/cosmwasm-stargate": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.25.6.tgz", - "integrity": "sha512-STaxur5Xk5hqndLEztpa1TqvpdQyg2xD//2ZNFw2fgxf1JQtP0RfFbA3bnBkYwbGARx5cnng8QeZmSUcXnTVxA==", - "requires": { - "@cosmjs/amino": "^0.25.6", - "@cosmjs/cosmwasm-launchpad": "^0.25.6", - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/proto-signing": "^0.25.6", - "@cosmjs/stargate": "^0.25.6", - "@cosmjs/tendermint-rpc": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "long": "^4.0.0", - "pako": "^2.0.2", - "protobufjs": "~6.10.2" - } - }, - "@cosmjs/crypto": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.25.6.tgz", - "integrity": "sha512-ec+YcQLrg2ibcxtNrh4FqQnG9kG9IE/Aik2NH6+OXQdFU/qFuBTxSFcKDgzzBOChwlkXwydllM9Jjbp+dgIzRw==", - "requires": { - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "bip39": "^3.0.2", - "bn.js": "^4.11.8", - "elliptic": "^6.5.3", - "js-sha3": "^0.8.0", - "libsodium-wrappers": "^0.7.6", - "ripemd160": "^2.0.2", - "sha.js": "^2.4.11" - } - }, - "@cosmjs/encoding": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.25.6.tgz", - "integrity": "sha512-0imUOB8XkUstI216uznPaX1hqgvLQ2Xso3zJj5IV5oJuNlsfDj9nt/iQxXWbJuettc6gvrFfpf+Vw2vBZSZ75g==", - "requires": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "@cosmjs/json-rpc": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.25.6.tgz", - "integrity": "sha512-Mn9og3/IEzC6jWoYXs0ONqFJc8HxVjXzrZPLgaRRdMZEUBvctxdhynau1wbE4LdkYQHbu4aiRu1q1jMYGFAj4A==", - "requires": { - "@cosmjs/stream": "^0.25.6", - "xstream": "^11.14.0" - } - }, - "@cosmjs/launchpad": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/launchpad/-/launchpad-0.25.6.tgz", - "integrity": "sha512-4Yhn4cX50UE6jZz/hWqKeeCmvrlrz0BBwOdYX/29k25FqP+oLAow1xKm6UxgYuuAq8Pg/bUvswxSqwegZJTb6g==", - "requires": { - "@cosmjs/amino": "^0.25.6", - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "axios": "^0.21.1", - "fast-deep-equal": "^3.1.3" - } - }, - "@cosmjs/math": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.25.6.tgz", - "integrity": "sha512-Fmyc9FJ8KMU34n7rdapMJrT/8rx5WhMw2F7WLBu7AVLcBh0yWsXIcMSJCoPHTOnMIiABjXsnrrwEaLrOOBfu6A==", - "requires": { - "bn.js": "^4.11.8" - } - }, - "@cosmjs/proto-signing": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.25.6.tgz", - "integrity": "sha512-JpQ+Vnv9s6i3x8f3Jo0lJZ3VMnj3R5sMgX+8ti1LtB7qEYRR85qbDrEG9hDGIKqJJabvrAuCHnO6hYi0vJEJHA==", - "requires": { - "@cosmjs/amino": "^0.25.6", - "long": "^4.0.0", - "protobufjs": "~6.10.2" - } - }, - "@cosmjs/socket": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.25.6.tgz", - "integrity": "sha512-hu+pW3Fy0IuhstXgxnZ2Iq0RUnGYoTWfqrxbTsgXBJge4MpEQs2YwGXgJZPMJXedBQivG0tU3r/Wvam0EWuRkQ==", - "requires": { - "@cosmjs/stream": "^0.25.6", - "isomorphic-ws": "^4.0.1", - "ws": "^7", - "xstream": "^11.14.0" - } - }, - "@cosmjs/stargate": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.25.6.tgz", - "integrity": "sha512-+LM1sK6vGuotJF9fBCBlaDL/yJhfzCV6KbsaWt3teHAKZhKYOd/9mKGiB4H9bfg4h3r+e+FZGiNkH/mdXkcgEw==", - "requires": { - "@confio/ics23": "^0.6.3", - "@cosmjs/amino": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/proto-signing": "^0.25.6", - "@cosmjs/stream": "^0.25.6", - "@cosmjs/tendermint-rpc": "^0.25.6", - "@cosmjs/utils": "^0.25.6", - "long": "^4.0.0", - "protobufjs": "~6.10.2" - } - }, - "@cosmjs/stream": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.25.6.tgz", - "integrity": "sha512-2mXIzf+WaFd+GSrRaJJETVXeZoC5sosuKChFERxSY8zXQ/f3OaG9J6m+quHpPbU3nAIEtnF1jgBVqJiD+NKwGQ==", - "requires": { - "xstream": "^11.14.0" - } - }, - "@cosmjs/tendermint-rpc": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.25.6.tgz", - "integrity": "sha512-wsvxTI7DReWJu+SVlXLblzh5NJppnh1mljuaTHodMf7HBxrXdbcCcBAO8oMbMgEqOASEY5G+z51wktxhrn9RtA==", - "requires": { - "@cosmjs/crypto": "^0.25.6", - "@cosmjs/encoding": "^0.25.6", - "@cosmjs/json-rpc": "^0.25.6", - "@cosmjs/math": "^0.25.6", - "@cosmjs/socket": "^0.25.6", - "@cosmjs/stream": "^0.25.6", - "axios": "^0.21.1", - "readonly-date": "^1.0.0", - "xstream": "^11.14.0" - } - }, - "@cosmjs/utils": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.25.6.tgz", - "integrity": "sha512-ofOYiuxVKNo238vCPPlaDzqPXy2AQ/5/nashBo5rvPZJkxt9LciGfUEQWPCOb1BIJDNx2Dzu0z4XCf/dwzl0Dg==" - }, - "@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" - }, - "@nymproject/nym-validator-client": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@nymproject/nym-validator-client/-/nym-validator-client-0.18.0.tgz", - "integrity": "sha512-FO1T15S2BJVuMoPA2yOaH40aD3hKJPKJVyX5ix7eJEbBWIdsYNoVeVc/soHhaAU1FIy2uU0G/FZQkaUYJGGb7Q==", - "requires": { - "@cosmjs/cosmwasm-stargate": "^0.25.5", - "@cosmjs/math": "^0.25.5", - "@cosmjs/proto-signing": "^0.25.5", - "@cosmjs/stargate": "^0.25.5", - "axios": "^0.21.1" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@tsconfig/recommended": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.1.tgz", - "integrity": "sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ==", - "dev": true - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" - } - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "requires": {} - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "libsodium": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", - "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" - }, - "libsodium-wrappers": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", - "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", - "requires": { - "libsodium": "^0.7.0" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - }, - "protobufjs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.3.tgz", - "integrity": "sha512-yvAslS0hNdBhlSKckI4R1l7wunVilX66uvrjzE4MimiAt7/qw1nLpMhZrn/ObuUTM/c3Xnfl01LYMdcSJe6dwg==", - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" - } - } - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "readonly-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readonly-date/-/readonly-date-1.0.0.tgz", - "integrity": "sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==" - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "save-dev": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/save-dev/-/save-dev-0.0.1-security.tgz", - "integrity": "sha512-k6knZTDNK8PKKbIqnvxiOveJinuw2LcQjqDoaorZWP9M5AR2EPsnpDeSbeoZZ0pHr5ze1uoaKdK8NBGQrJ34Uw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==" - }, - "tasktimer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tasktimer/-/tasktimer-3.0.0.tgz", - "integrity": "sha512-Fx2Zw4FFM/gc9cY4Iodo9UwC9yFl7fIU3ay/wqq0+E5WT587aZlmjCW2yLCHRVIwzcSig4tMqIh4vqxOcyXr9A==", - "requires": { - "eventemitter3": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "requires": { - "nopt": "~1.0.10" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "requires": {} - }, - "xstream": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", - "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", - "requires": { - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - } - } -} diff --git a/docker/typescript_client/upload_contract/package.json b/docker/typescript_client/upload_contract/package.json deleted file mode 100644 index 8508b2f306..0000000000 --- a/docker/typescript_client/upload_contract/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "nym-driver-example", - "version": "1.0.0", - "main": "./dist/index.js", - "author": "Dave Hrycyszyn", - "license": "MIT", - "description": "The simplest cosmjs typescript client to work as an example driver program", - "repository": "https://github.com/nymtech/nym", - "scripts": { - "build": "tsc" - }, - "devDependencies": { - "@tsconfig/recommended": "^1.0.1", - "prettier": "^2.8.7", - "typescript": "^4.1.3" - }, - "dependencies": { - "@types/node": "^14.14.22", - "nodemon": "^2.0.20", - "@nymproject/nym-validator-client" : "0.18.0", - "save-dev": "0.0.1-security", - "tasktimer": "^3.0.0", - "ts-node": "^9.1.1" - } -} diff --git a/docker/typescript_client/upload_contract/upload-wasm.ts b/docker/typescript_client/upload_contract/upload-wasm.ts deleted file mode 100644 index c525de6f6b..0000000000 --- a/docker/typescript_client/upload_contract/upload-wasm.ts +++ /dev/null @@ -1,43 +0,0 @@ -// npx ts-node upload-wasm.ts - -import ValidatorClient from "@nymproject/nym-validator-client"; -import * as fs from 'fs'; - -async function newClient(): Promise { - let contract = "fakeContractAddress"; // we don't have one yet - let mnemonic = fs.readFileSync("/genesis_volume/genesis_mnemonic", "utf8").slice(0, -1); - let admin = ValidatorClient.connect(contract, mnemonic, "http://genesis_validator:26657", process.env["BECH32_PREFIX"]); - return admin; -} - -async function main() { - let admin = await newClient(); - console.log(`admin address: ${admin.address}`); - - // check that we have actually connected to an account, query it to test - let balance = await admin.getBalance(admin.address); - console.log(`balance of admin account is: ${balance.amount}${balance.denom}`); - - let wasm = fs.readFileSync("/nym/contracts/mixnet/target/wasm32-unknown-unknown/release/mixnet_contracts.wasm"); - console.log("wasm loaded"); - - // dave can upload (note: nobody else can) - const uploadResult = await admin.upload(admin.address, wasm, undefined, "mixnet contract");//.then((uploadResult) => console.log("Upload from dave succeeded, codeId is: " + uploadResult.codeId)).catch((err) => console.log(err)); - - //todo - //add vesting contract? - - // Instantiate the copy of the option contract - const { codeId } = uploadResult; - console.log("code id is", codeId) - const initMsg = {}; - const options = { memo: "v0.1.0", transferAmount: [{ denom: "u" + process.env["BECH32_PREFIX"], amount: "1000000" }], admin: admin.address } - let instantiateResult = await admin.instantiate(admin.address, codeId, initMsg, "mixnet contract", options); - let contractAddress = instantiateResult.contractAddress; - console.log(`mixnet contract ${contractAddress} instantiated successfully`) - fs.writeFileSync("/contract_volume/contract_address", contractAddress); -} - - - -main(); diff --git a/docker/validator/.env.sample b/docker/validator/.env.sample new file mode 100644 index 0000000000..2e1b4c4b1c --- /dev/null +++ b/docker/validator/.env.sample @@ -0,0 +1,25 @@ +CONFIGURED=true + +NETWORK_NAME=nymtestnetwork + +RUST_LOG=info +RUST_BACKTRACE=1 + +BECH32_PREFIX=n +MIX_DENOM=unym +MIX_DENOM_DISPLAY=nym +STAKE_DENOM=unyx +STAKE_DENOM_DISPLAY=nyx +DENOMS_EXPONENT=6 + +MIXNET_CONTRACT_ADDRESS= +VESTING_CONTRACT_ADDRESS= +GROUP_CONTRACT_ADDRESS= +ECASH_CONTRACT_ADDRESS= +MULTISIG_CONTRACT_ADDRESS= +COCONUT_DKG_CONTRACT_ADDRESS= + +REWARDING_VALIDATOR_ADDRESS= +NYXD="https://localhost:26656" +NYM_API="https://insertvalues.io" +NYXD_WS="wss://insertvalues.io" \ No newline at end of file diff --git a/docker/validator/.gitignore b/docker/validator/.gitignore new file mode 100644 index 0000000000..151f3ee8e5 --- /dev/null +++ b/docker/validator/.gitignore @@ -0,0 +1,15 @@ +# data + +data/ +data/validator/ +data/addresses/ + +secrets/ + +# docker +.docker/ + +# access +*_mnemonic +*.key +genesis_mnemonic \ No newline at end of file diff --git a/docker/validator/Dockerfile b/docker/validator/Dockerfile index cfcc007931..5e3039495a 100644 --- a/docker/validator/Dockerfile +++ b/docker/validator/Dockerfile @@ -1,12 +1,42 @@ -FROM golang:buster as go_builder -ARG BECH32_PREFIX -ARG WASMD_VERSION -RUN apt update && apt install -y git build-essential -COPY setup.sh . -RUN ./setup.sh +FROM ubuntu:24.04 -FROM ubuntu:20.04 -COPY --from=go_builder /go/wasmd/build/nymd /root/nymd -COPY --from=go_builder /go/wasmd/build/libwasmvm*.so /root -COPY init_and_start.sh . -ENTRYPOINT ["./init_and_start.sh"] +ARG WASMD_VERSION +ARG NYM_CLI_GIT_TAG +ARG RETAIN_BLOCKS + +RUN apt-get update && apt-get install -y \ + ca-certificates \ + jq \ + curl \ + wget \ + vim \ + openssl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /root + +RUN wget -O nym-cli "https://github.com/nymtech/nym/releases/download/nym-binaries-v${NYM_CLI_GIT_TAG:-2025.8-tourist}/nym-cli" && \ + chmod 755 nym-cli || echo "nym-cli not available" + +RUN wget "https://github.com/nymtech/nyxd/releases/download/${WASMD_VERSION:-v0.54.3}/nyxd-ubuntu-22.04.tar.gz" && \ + tar -zxvf nyxd-ubuntu-22.04.tar.gz && \ + mv libwasmvm.x86_64.so /lib/x86_64-linux-gnu/ && \ + chmod 755 nyxd && \ + rm nyxd-ubuntu-22.04.tar.gz + +RUN mkdir -p "/root/.nyxd/config" "/root/output" +RUN chmod 755 "/root/.nyxd" "/root/.nyxd/config" "/root/output" + +VOLUME /root/.nyxd +VOLUME /root/output + +RUN touch .env + +COPY start.sh . +RUN chmod 755 *.sh + +ENV RETAIN_BLOCKS=${RETAIN_BLOCKS} + +ENTRYPOINT ["./start.sh"] +CMD ["genesis"] \ No newline at end of file diff --git a/docker/validator/docker-compose.yml b/docker/validator/docker-compose.yml new file mode 100644 index 0000000000..182f4f7e86 --- /dev/null +++ b/docker/validator/docker-compose.yml @@ -0,0 +1,30 @@ +services: + validator: + build: + context: ./ + args: + NYM_CLI_GIT_TAG: "2025.8-tourist" + WASMD_VERSION: "v0.54.3" + image: validator:latest + container_name: validator + ports: + - "127.0.0.1:26657:26657" + - "127.0.0.1:26656:26656" + - "127.0.0.1:1317:1317" + restart: unless-stopped + deploy: + resources: + limits: + cpus: '2' + memory: 4G + volumes: + - ./data/addresses:/root/output + - ./data/validator:/root/.nyxd + environment: + BECH32_PREFIX: "n" + DENOM: "nym" + STAKE_DENOM: "nyx" + WASMD_VERSION: "v0.54.3" + CHAIN_ID: "nymtestnetwork" + NYM_CLI_GIT_TAG: "2025.8-tourist" + RETAIN_BLOCKS: "no" \ No newline at end of file diff --git a/docker/validator/init_and_start.sh b/docker/validator/init_and_start.sh deleted file mode 100755 index a1e8820fbc..0000000000 --- a/docker/validator/init_and_start.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh - -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root -PASSPHRASE=passphrase - -cd /root - -if [ "$1" = "genesis" ]; then - if [ ! -f "/root/.nymd/config/genesis.json" ]; then - ./nyxd init nymnet --chain-id nymnet 2> /dev/null - # staking/governance token is hardcoded in config, change this - sed -i "s/\"stake\"/\"u${STAKE_DENOM}\"/" /root/.nyxd/config/genesis.json - sed -i 's/minimum-gas-prices = ""/minimum-gas-prices = "0.025u'"${DENOM}"'"/' /root/.nyxd/config/app.toml - sed -i '0,/enable = false/s//enable = true/g' /root/.nyxd/config/app.toml - sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["*"\]/' /root/.nyxd/config/config.toml - sed -i 's/create_empty_blocks = true/create_empty_blocks = false/' /root/.nyxd/config/config.toml - sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/' /root/.nyxd/config/config.toml - -# create accounts - yes "${PASSPHRASE}" | ./nyxd keys add node_admin 2>&1 >/dev/null | tail -n 1 > /root/.nyxd/mnemonic - yes "${PASSPHRASE}" | ./nyxd keys add secondary 2>&1 >/dev/null | tail -n 1 > /root/.nyxd/secondary_mnemonic - cp /root/.nyxd/mnemonic /genesis_volume/genesis_mnemonic - cp /root/.nyxd/secondary_mnemonic /genesis_volume/secondary_mnemonic - -# add genesis accounts with some initial tokens - GENESIS_ADDRESS=$(yes "${PASSPHRASE}" | ./nyxd keys show node_admin -a) - SECONDARY_ADDRESS=$(yes "${PASSPHRASE}" | ./nyxd keys show secondary -a) - yes "${PASSPHRASE}" | ./nyxd add-genesis-account "${GENESIS_ADDRESS}" 1000000000000000u"${DENOM}",1000000000000000u"${STAKE_DENOM}" - yes "${PASSPHRASE}" | ./nyxd add-genesis-account "${SECONDARY_ADDRESS}" 1000000000000000u"${DENOM}",1000000000000000u"${STAKE_DENOM}" - - yes "${PASSPHRASE}" | ./nyxd gentx node_admin 1000000000u"${STAKE_DENOM}" --chain-id nymnet 2> /dev/null - ./nyxd collect-gentxs 2> /dev/null - ./nyxd validate-genesis > /dev/null - cp /root/.nyxd/config/genesis.json /genesis_volume/genesis.json - else - echo "Validator already initialized, starting with the existing configuration." - echo "If you want to re-init the validator, destroy the existing container" - fi - ./nyxd start -elif [ "$1" = "secondary" ]; then - if [ ! -f "/root/.nymd/config/genesis.json" ]; then - ./nyxd init nymnet --chain-id nym-secondary 2> /dev/null - - # Wait until the genesis node writes the genesis.json to the shared volume - while ! [ -s /genesis_volume/genesis.json ]; do - sleep 1 - done - -# wait for the actual validator to start up - sleep 5 - - cp /genesis_volume/genesis.json /root/.nyxd/config/genesis.json - GENESIS_PEER=$(cat /root/.nyxd/config/genesis.json | grep '"memo"' | cut -d'"' -f 4) - GENESIS_IP=$(cat /root/.nyxd/config/genesis.json | grep '"memo"' | cut -d'@' -f2 | cut -d: -f1) - sed -i 's/persistent_peers = ""/persistent_peers = "'"${GENESIS_PEER}"'"/' /root/.nyxd/config/config.toml - sed -i 's/minimum-gas-prices = ""/minimum-gas-prices = "0.025u'"${BECH32_PREFIX}"'"/' /root/.nyxd/config/app.toml - sed -i '0,/enable = false/s//enable = true/g' /root/.nyxd/config/app.toml - sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["*"\]/' /root/.nyxd/config/config.toml - sed -i 's/create_empty_blocks = true/create_empty_blocks = false/' /root/.nyxd/config/config.toml - sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/' /root/.nyxd/config/config.toml - -# import mnemonic generated by the genesis validator (have a local copy for ease of use) - cp /genesis_volume/secondary_mnemonic /root/.nyxd/mnemonic - { cat /root/.nyxd/mnemonic; echo "${PASSPHRASE}"; echo "${PASSPHRASE}"; } | ./nyxd keys add node_admin --recover #> /dev/null - ./nyxd validate-genesis > /dev/null - -# create validator -# don't even ask about those sleeps... - { echo "${PASSPHRASE}"; sleep 10; yes; sleep 10; } | ./nyxd tx staking create-validator --amount=10000000u"${STAKE_DENOM}" --fees 100000u"${DENOM}" --pubkey="$(./nyxd tendermint show-validator)" --moniker="secondary" --commission-rate="0.10" --commission-max-rate="0.20" --commission-max-change-rate="0.01" --min-self-delegation="1" --chain-id=nymnet --from=node_admin -b async --node http://"${GENESIS_IP}":26657 - else - echo "Validator already initialized, starting with the existing configuration." - echo "If you want to re-init the validator, destroy the existing container" - fi - ./nyxd start -else - echo "Wrong command. Usage: ./$0 [genesis/secondary]" -fi diff --git a/docker/validator/setup.sh b/docker/validator/setup.sh deleted file mode 100755 index 4b176fb04e..0000000000 --- a/docker/validator/setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -set -ue - -git clone https://github.com/CosmWasm/wasmd.git -cd wasmd -git checkout "${WASMD_VERSION}" -WASMD_COMMIT_HASH=$(git rev-parse HEAD) -mkdir build -go build \ - -o build/nyxd -mod=readonly -tags "netgo,ledger" \ - -ldflags "-X github.com/cosmos/cosmos-sdk/version.Name=nymd \ - -X github.com/cosmos/cosmos-sdk/version.AppName=nymd \ - -X github.com/CosmWasm/wasmd/app.NodeDir=.nymd \ - -X github.com/cosmos/cosmos-sdk/version.Version=${WASMD_VERSION} \ - -X github.com/cosmos/cosmos-sdk/version.Commit=${WASMD_COMMIT_HASH} \ - -X github.com/CosmWasm/wasmd/app.Bech32Prefix=${BECH32_PREFIX} \ - -X 'github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger'" \ - -trimpath ./cmd/wasmd -find .. -type f -name 'libwasm*.so' -exec cp {} build \; diff --git a/docker/validator/start.sh b/docker/validator/start.sh new file mode 100755 index 0000000000..d9cfab7d23 --- /dev/null +++ b/docker/validator/start.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":/root +PASSPHRASE=passphrase +APP_NAME=nyxd +OUTPUT_DIRECTORY="/root/output" +VALIDATOR_DATA_DIRECTORY="/root/.${APP_NAME}" + +mkdir -p "${VALIDATOR_DATA_DIRECTORY}/config" +mkdir -p "${OUTPUT_DIRECTORY}" + +if [ ! -f "${VALIDATOR_DATA_DIRECTORY}/config/genesis.json" ]; then + # initialise the validator + ./${APP_NAME} init "${CHAIN_ID}" --chain-id "${CHAIN_ID}" 2>/dev/null + + echo "init chain successful" + sleep 5 + + echo "checking config files:" + ls -la ${VALIDATOR_DATA_DIRECTORY}/config/ + + echo "changing params" + sed -i "s/\"stake\"/\"u${STAKE_DENOM}\"/" "${VALIDATOR_DATA_DIRECTORY}/config/genesis.json" + sed -i 's/minimum-gas-prices = "0stake"/minimum-gas-prices = "0.025u'"${DENOM}"'"/' "${VALIDATOR_DATA_DIRECTORY}/config/app.toml" + sed -i '0,/enable = false/s//enable = true/g' "${VALIDATOR_DATA_DIRECTORY}/config/app.toml" + if [ "$RETAIN_BLOCKS" = "no" ]; then + # amending to say if min retain blocks should be set yes or no... + sed -i 's/min-retain-blocks = 0/min-retain-blocks = 70000/' "${VALIDATOR_DATA_DIRECTORY}/config/app.toml" + fi + sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["*"\]/' "${VALIDATOR_DATA_DIRECTORY}/config/config.toml" + sed -i 's/create_empty_blocks = true/create_empty_blocks = false/' "${VALIDATOR_DATA_DIRECTORY}/config/config.toml" + sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/' "${VALIDATOR_DATA_DIRECTORY}/config/config.toml" + sed -i 's/address = "tcp:\/\/localhost:1317"/address = "tcp:\/\/0.0.0.0:1317"/' "${VALIDATOR_DATA_DIRECTORY}/config/app.toml" + + echo "params changed" + + echo "adding parent mnemonic account details" + yes "${PASSPHRASE}" | ./${APP_NAME} keys add node_admin 2>&1 >/dev/null | tail -n 1 >${OUTPUT_DIRECTORY}/node_admin_mnemonic + + # add genesis accounts with some initial tokens + echo "adding genesis account details" + GENESIS_ADDRESS=$(yes "${PASSPHRASE}" | ./${APP_NAME} keys show node_admin -a) + yes "${PASSPHRASE}" | ./${APP_NAME} genesis add-genesis-account "${GENESIS_ADDRESS}" 1000000000000000u"${DENOM}",1000000000000000u"${STAKE_DENOM}" + + echo "adding gentx time :)" + yes "${PASSPHRASE}" | ./${APP_NAME} genesis gentx node_admin 100000000000u"${STAKE_DENOM}" --chain-id "${CHAIN_ID}" 2>/dev/null + ./${APP_NAME} genesis collect-gentxs 2>/dev/null + ./${APP_NAME} genesis validate-genesis >/dev/null + + # make a copy of the genesis file to the output directory + cp "${VALIDATOR_DATA_DIRECTORY}/config/genesis.json" "${OUTPUT_DIRECTORY}/genesis.json" +fi + +./${APP_NAME} start & +sleep 10 + +sleep infinity \ No newline at end of file diff --git a/docker/vesting_contract/Dockerfile b/docker/vesting_contract/Dockerfile deleted file mode 100644 index eddf9f7004..0000000000 --- a/docker/vesting_contract/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM rust -RUN rustup target add wasm32-unknown-unknown -CMD cd nym/contracts/vesting && RUSTFLAGS='-C link-arg=-s' cargo build --release --target wasm32-unknown-unknown \ No newline at end of file diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index b0477e60d6..0000000000 --- a/tests/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## Binary init checker - -A simple tool to ensure that all binaries init with the correct format, using the `assert.sh` library - -Simply run `./build_and_run.sh $WORKING_BRANCH` -For example: - -`./build_and_run.sh release/v1.1.11` - -Currently, this is run on linux based machines as the nym-core binaries are published via a linux build agent - - -This will run through all the binaries and check the fields that we expect to be initialised when passing the parameters into nyms core binaries diff --git a/tests/assert.sh b/tests/assert.sh deleted file mode 100755 index ffd2b9551b..0000000000 --- a/tests/assert.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash -# assert.sh 1.1 - bash unit testing framework -# Copyright (C) 2009-2015 Robert Lehmann -# -# http://github.com/lehmannro/assert.sh -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . - -export DISCOVERONLY=${DISCOVERONLY:-} -export DEBUG=${DEBUG:-} -export STOP=${STOP:-} -export INVARIANT=${INVARIANT:-} -export CONTINUE=${CONTINUE:-} - -args="$(getopt -n "$0" -l \ - verbose,help,stop,discover,invariant,continue vhxdic $*)" \ -|| exit -1 -for arg in $args; do - case "$arg" in - -h) - echo "$0 [-vxidc]" \ - "[--verbose] [--stop] [--invariant] [--discover] [--continue]" - echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]" - exit 0;; - --help) - cat < [stdin] - (( tests_ran++ )) || : - [[ -z "$DISCOVERONLY" ]] || return - expected=$(echo -ne "${2:-}") - result="$(eval 2>/dev/null $1 <<< ${3:-})" || true - if [[ "$result" == "$expected" ]]; then - [[ -z "$DEBUG" ]] || echo -n . - return - fi - result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")" - [[ -z "$result" ]] && result="nothing" || result="\"$result\"" - [[ -z "$2" ]] && expected="nothing" || expected="\"$2\"" - _assert_fail "expected $expected${_indent}got $result" "$1" "$3" -} - -assert_raises() { - # assert_raises [stdin] - (( tests_ran++ )) || : - [[ -z "$DISCOVERONLY" ]] || return - status=0 - (eval $1 <<< ${3:-}) > /dev/null 2>&1 || status=$? - expected=${2:-0} - if [[ "$status" -eq "$expected" ]]; then - [[ -z "$DEBUG" ]] || echo -n . - return - fi - _assert_fail "program terminated with code $status instead of $expected" "$1" "$3" -} - -_assert_fail() { - # _assert_fail - [[ -n "$DEBUG" ]] && echo -n X - report="test #$tests_ran \"$2${3:+ <<< $3}\" failed:${_indent}$1" - if [[ -n "$STOP" ]]; then - [[ -n "$DEBUG" ]] && echo - echo "$report" - exit 1 - fi - tests_errors[$tests_failed]="$report" - (( tests_failed++ )) || : -} - -skip_if() { - # skip_if - (eval $@) > /dev/null 2>&1 && status=0 || status=$? - [[ "$status" -eq 0 ]] || return - skip -} - -skip() { - # skip (no arguments) - shopt -q extdebug && tests_extdebug=0 || tests_extdebug=1 - shopt -q -o errexit && tests_errexit=0 || tests_errexit=1 - # enable extdebug so returning 1 in a DEBUG trap handler skips next command - shopt -s extdebug - # disable errexit (set -e) so we can safely return 1 without causing exit - set +o errexit - tests_trapped=0 - trap _skip DEBUG -} -_skip() { - if [[ $tests_trapped -eq 0 ]]; then - # DEBUG trap for command we want to skip. Do not remove the handler - # yet because *after* the command we need to reset extdebug/errexit (in - # another DEBUG trap.) - tests_trapped=1 - [[ -z "$DEBUG" ]] || echo -n s - return 1 - else - trap - DEBUG - [[ $tests_extdebug -eq 0 ]] || shopt -u extdebug - [[ $tests_errexit -eq 1 ]] || set -o errexit - return 0 - fi -} - - -_assert_reset -: ${tests_suite_status:=0} # remember if any of the tests failed so far -_assert_cleanup() { - local status=$? - # modify exit code if it's not already non-zero - [[ $status -eq 0 && -z $CONTINUE ]] && exit $tests_suite_status -} -trap _assert_cleanup EXIT diff --git a/tests/build_and_run.sh b/tests/build_and_run.sh deleted file mode 100755 index 6c492b4ea9..0000000000 --- a/tests/build_and_run.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -PWD="../" -GIT_BRANCH=$1 - -# run the script from the correct location - -if [[ $(pwd) != */tests ]]; then - echo "Please run the script from the 'tests' directory." - exit 1 -fi - -# lets make sure the branch is up to date -# --------------------------------------- -git checkout develop -git fetch origin -git checkout $GIT_BRANCH -git pull origin $GIT_BRANCH -# --------------------------------------- - -echo "working directory ${PWD}" - -#build all binaries... -#expect the cargo tool chain to be installed on the machine -cargo build --release --all - -#here there should be the applicable binaries to test inits -echo "running mixnode binary check" -./nym-mixnode-binary-check.sh - -sleep 2 - -echo "running gateway binary check" -./nym-gateway-binary-check.sh - -sleep 2 - -echo "running socks-5 binary check" -./nym-socks-5-binary-check.sh - -sleep 2 - -echo "running network-requester binary check" -./nym-network-requester-binary-check.sh - -sleep 2 - -echo "running client binary check" -./nym-client-binary-check.sh - - diff --git a/tests/nym-client-binary-check.sh b/tests/nym-client-binary-check.sh deleted file mode 100755 index ee23bccb64..0000000000 --- a/tests/nym-client-binary-check.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash - -set -e - -. assert.sh -v -x - -PWD="../" -RELEASE_DIRECTORY="target/release" -OUTPUT=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done) -ID="test-${OUTPUT}" -BINARY_NAME="nym-client" - -# install the current release binary -# so this is dependant on running on a linux machine for the time being - -curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME -chmod u+x $BINARY_NAME - -#---------------------------------------------------------------------------------------------------------- -# functions -#---------------------------------------------------------------------------------------------------------- - -check_nym_client_binary_build() if [ -f $BINARY_NAME ]; then - echo "running init tests" - ./${BINARY_NAME} init --id ${ID} --output-json >/dev/null 2>&1 - - # currently this outputs to a file name name - # we currently store the output in a file in the same directory - - if [ -f client_init_results.json ]; then - OUTPUT=$(cat client_init_results.json) - - # get jq values for things we can assert against - # until the service provider is provided in the output we can validate the id is correct on init - VALUE=$(echo ${OUTPUT} | jq .id) - VALUE=${VALUE#\"} - VALUE=${VALUE%\"} - - # do asserts here based upon the output on init - - assert "echo ${VALUE}" $(echo ${ID}) - assert_end nym-client-tests - else - echo "exting test no binary found" - fi -else - echo "exting test no binary found" -fi - -#---------------------------------------------------------------------------------------------------------- -# tests -#---------------------------------------------------------------------------------------------------------- -# we run the release version first - -check_nym_client_binary_build - -first_init=$(cat ${HOME}/.nym/clients/${ID}/config/config.toml | grep -v "^version =") - -#---------------------------------------------------------------------------------------------------------- -# lets remove the binary then navigate to the target/release directory for checking the latest version -# expect to have successful output and configuration -#---------------------------------------------------------------------------------------------------------- - -if [ -f $BINARY_NAME ]; then - echo "removing client binary" - rm -rf $BINARY_NAME -else - echo "no binary found exiting" - exit 1 -fi - -#---------------------------------------------------------------------------------------------------------- -# we should expect it to pass because no errors should be presented when performing the upgrade of an init -# this should be caught at testing stage - navigate to latest binary build -#---------------------------------------------------------------------------------------------------------- - -cd ${PWD}${RELEASE_DIRECTORY} - -# re-run against the current binary built locally - -echo "diff the config files after each init" -echo "-------------------------------------" - -check_nym_client_binary_build - -second_init=$(cat ${HOME}/.nym/clients/${ID}/config/config.toml | grep -v "^version =") - -diff -w <(echo "$first_init") <(echo "$second_init") - -# check the status of the diff -if [ $? -eq 0 ]; then - echo "no differences in config files, exiting script" - exit 0 -else - echo "there are differences in the config files, it may require a fresh init on the binary" - exit 1 -fi - -# we should expect it to pass because no errors should be presented when performing the upgrade of an init diff --git a/tests/nym-gateway-binary-check.sh b/tests/nym-gateway-binary-check.sh deleted file mode 100755 index 9df6fd80f6..0000000000 --- a/tests/nym-gateway-binary-check.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash - -set -e - -. assert.sh -v -x - -PWD="../" -RELEASE_DIRECTORY="target/release" -WALLET_ADDRESS_CONST=n1435n84se65tn7yv536am0sfvng4yyrwj7thhxr -MOCK_HOST="1.2.3.4" -RANDOM_ID=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done) -ID="test-${RANDOM_ID}" -BINARY_NAME="nym-gateway" - -# install the current release binary -# so this is dependant on running on a linux machine for the time being - -curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME -chmod u+x $BINARY_NAME - -#-------------------------------------- -# functions -#-------------------------------------- - -check_gateway_binary_build() if [ -f "$BINARY_NAME" ]; then - echo "running init tests" - # we wont use config env files for now - # unless we want to use a specific environment - OUTPUT=$(./${BINARY_NAME} --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST}) >/dev/null 2>&1 - - # get jq values for things we can assert against - VALUE=$(echo ${OUTPUT} | jq .data_store) - VALUE=${VALUE#\"} - VALUE=${VALUE%\"} - - #------------------------------------------------------ - DATA_STORE="${HOME}/.nym/gateways/${ID}/data/db.sqlite" - #------------------------------------------------------ - - # do asserts here based upon the output - # check the data store path - - assert "echo ${VALUE}" $(echo ${DATA_STORE}) - assert_end nym-gateway-tests -else - echo "exting test no binary found" -fi - -#---------------------------------------------------------------------------------------------------------- -# tests -#---------------------------------------------------------------------------------------------------------- - -# we run the release version first -check_gateway_binary_build -# whoami -# this is dependant on where it runs on ci potentially, will need to tweak this in the future -first_init=$(cat ${HOME}/.nym/gateways/${ID}/config/config.toml | grep -v "^\[gateway\]$" | grep -v "^version =" | grep -v "^cosmos_mnemonic =") - -#lets remove the binary then navigate to the target/release directory for checking the latest version -if [ -f "$BINARY_NAME" ]; then - echo "removing nym-gateway" - rm -rf "$BINARY_NAME" - echo "successfully removed nym-gateway" -else - echo "no binary found exiting" - exit 1 -fi - -#---------------------------------------------------------------------------------------------------------- -# we should expect it to pass because no errors should be presented when performing the upgrade of an init -# this should be caught at testing stage - navigate to latest binary build -#---------------------------------------------------------------------------------------------------------- - -cd ${PWD}${RELEASE_DIRECTORY} - -#re run against the current binary built locally - -check_gateway_binary_build - -echo "diff the config files after each init" -echo "-------------------------------------" - -second_init=$(cat ${HOME}/.nym/gateways/${ID}/config/config.toml | grep -v "^\[gateway\]$" | grep -v "^version =" | grep -v "^cosmos_mnemonic =") - -diff -w <(echo "$first_init") <(echo "$second_init") - -# check the status of the diff -if [ $? -eq 0 ]; then - echo "no differences in config files, exiting script" - exit 0 -else - echo "there are differences in the config files, it may require a fresh init on the binary" - exit 1 -fi diff --git a/tests/nym-mixnode-binary-check.sh b/tests/nym-mixnode-binary-check.sh deleted file mode 100755 index cb47ed9b4b..0000000000 --- a/tests/nym-mixnode-binary-check.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -. assert.sh -v -x - -PWD="../" -RELEASE_DIRECTORY="target/release" -WALLET_ADDRESS_CONST=n1435n84se65tn7yv536am0sfvng4yyrwj7thhxr -MOCK_HOST="1.2.3.4" -RANDOM_ID=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done) -ID="test-${RANDOM_ID}" -BINARY_NAME="nym-mixnode" - -# install the current release binary -# so this is dependant on running on a linux machine for the time being - -curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME -chmod u+x $BINARY_NAME - -#---------------------------------------------------------------------------------------------------------- -# functions -#---------------------------------------------------------------------------------------------------------- - -check_mixnode_binary_build() { - if [ -f "$BINARY_NAME" ]; then - echo "running init tests" - # we wont use config env files for now - OUTPUT=$(./${BINARY_NAME} --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST}) >/dev/null - # get jq values for things we can assert against - # tidy this bit up - okay for first push - - VALUE="$(echo ${OUTPUT} | jq .wallet_address | tr -d '"')" - - # do asserts here based upon the output on init - assert "echo ${VALUE}" $(echo ${WALLET_ADDRESS_CONST}) - assert_end nym-mixnode-tests - else - echo "exiting test no binary found" - fi -} - -#---------------------------------------------------------------------------------------------------------- -# tests -#---------------------------------------------------------------------------------------------------------- - -# we run the release version first -check_mixnode_binary_build -# whoami -# this is dependant on where it runs on ci potentially, will need to tweak this in the future -first_init=$(cat ${HOME}/.nym/mixnodes/${ID}/config/config.toml | grep -v "^\[mixnode\]$" | grep -v "^version =") - -#lets remove the binary then navigate to the target/release directory for checking the latest version -if [ -f "$BINARY_NAME" ]; then - echo "removing nym-mixnode" - rm -rf "$BINARY_NAME" - echo "successfully removed nym-mixnode" -else - echo "no binary found exiting" - exit 1 -fi - -#---------------------------------------------------------------------------------------------------------- -# we should expect it to pass because no errors should be presented when performing the upgrade of an init -# this should be caught at testing stage - navigate to latest binary build -#---------------------------------------------------------------------------------------------------------- - -cd ${PWD}${RELEASE_DIRECTORY} - -#re run against the current binary built locally - -check_mixnode_binary_build - -echo "diff the config files after each init" -echo "-------------------------------------" - -second_init=$(cat ${HOME}/.nym/mixnodes/${ID}/config/config.toml | grep -v "^\[mixnode\]$" | grep -v "^version =") - -diff -w <(echo "$first_init") <(echo "$second_init") - -# check the status of the diff -if [ $? -eq 0 ]; then - echo "no differences in config files, exiting script" - exit 0 -else - echo "there are differences in the config files, it may require a fresh init on the binary" - exit 1 -fi diff --git a/tests/nym-network-requester-binary-check.sh b/tests/nym-network-requester-binary-check.sh deleted file mode 100755 index 8f299cc042..0000000000 --- a/tests/nym-network-requester-binary-check.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -set -e - -. assert.sh -v -x - -PWD="../" -RELEASE_DIRECTORY="target/release" -RANDOM_ID=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done) -ID="test-${RANDOM_ID}" -BINARY_NAME="nym-network-requester" - -echo "the version number is ${RELEASE_VERSION_NUMBER} to be installed from github" - -# we have now the bundled the client into the network requester, more a less the same output as the client - -curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME -chmod u+x $BINARY_NAME - -#---------------------------------------------------------------------------------------------------------- -# functions -#---------------------------------------------------------------------------------------------------------- - -check_nym_network_requester_binary_build() if [ -f $BINARY_NAME ]; then - echo "running init tests" - ./${BINARY_NAME} init --id ${ID} --output-json >/dev/null 2>&1 - - # currently this outputs to a file name name - # we currently store the output in a file in the same directory - - if [ -f "client_init_results.json" ]; then - OUTPUT=$(cat client_init_results.json) - - # get jq values for things we can assert against - # until the service provider is provided in the output we can validate the id is correct on init - VALUE=$(echo ${OUTPUT} | jq .id) - VALUE=${VALUE#\"} - VALUE=${VALUE%\"} - - # do asserts here based upon the output on init - - assert "echo ${VALUE}" $(echo ${ID}) - assert_end nym-network-requester-tests - else - echo "exting test no binary found" - fi -else - echo "exting test no binary found" -fi - -#---------------------------------------------------------------------------------------------------------- -# tests -#---------------------------------------------------------------------------------------------------------- -# we run the release version first - -check_nym_network_requester_binary_build - -first_init=$(cat ${HOME}/.nym/service-providers/network-requester/${ID}/config/config.toml | grep -v "^version =") - -#---------------------------------------------------------------------------------------------------------- -# lets remove the binary then navigate to the target/release directory for checking the latest version -# expect to have successful output and configuration -#---------------------------------------------------------------------------------------------------------- - -if [ -f $BINARY_NAME ]; then - echo "removing nym-network-requester binary" - rm -rf $BINARY_NAME -else - echo "no binary found exiting" - exit 1 -fi - -#---------------------------------------------------------------------------------------------------------- -# we should expect it to pass because no errors should be presented when performing the upgrade of an init -# this should be caught at testing stage - navigate to latest binary build -#---------------------------------------------------------------------------------------------------------- - -cd ${PWD}${RELEASE_DIRECTORY} - -# re-run against the current binary built locally - -echo "diff the config files after each init" -echo "-------------------------------------" - -check_nym_network_requester_binary_build - -second_init=$(cat ${HOME}/.nym/service-providers/network-requester/${ID}/config/config.toml | grep -v "^version =") - -diff -w <(echo "$first_init") <(echo "$second_init") - -# check the status of the diff -if [ $? -eq 0 ]; then - echo "no differences in config files, exiting script" - exit 0 -else - echo "there are differences in the config files, it may require a fresh init on the binary" - exit 1 -fi - -# we should expect it to pass because no errors should be presented when performing the upgrade of an init diff --git a/tests/nym-socks-5-binary-check.sh b/tests/nym-socks-5-binary-check.sh deleted file mode 100755 index ebcfe85e14..0000000000 --- a/tests/nym-socks-5-binary-check.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -set -e - -. assert.sh -v -x - -PWD="../" -RELEASE_DIRECTORY="target/release" -MOCK_SERVICE_PROVIDER="36cUqdggtdXixZhmXfyZm3Dep3Q5QsKVPotMrVSmS4oY.ZCCAdFPwPNSTtUMYveA62ttEFe8FDiB3cdheWHtCytX@6Lnxj9vD2YMtSmfe8zp5RBtj1uZLYQAFRxY9q7ANwrZz" -RANDOM_ID=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done) -ID="test-${RANDOM_ID}" -BINARY_NAME="nym-socks5-client" - -# install the current release binary -# so this is dependant on running on a linux machine for the time being - -curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME -chmod u+x $BINARY_NAME - -#---------------------------------------------------------------------------------------------------------- -# functions -#---------------------------------------------------------------------------------------------------------- - -check_nym_socks5_client_binary_build() if [ -f $BINARY_NAME ]; then - echo "running init tests" - ./${BINARY_NAME} init --id ${ID} --provider ${MOCK_SERVICE_PROVIDER} --output-json >/dev/null 2>&1 - - # currently this outputs to a file name name - # we currently store the output in a file in the same directory - - if [ -f "socks5_client_init_results.json" ]; then - OUTPUT=$(cat socks5_client_init_results.json) - - # get jq values for things we can assert against - # until the service provider is provided in the output we can validate the id is correct on init - VALUE=$(echo ${OUTPUT} | jq .id) - VALUE=${VALUE#\"} - VALUE=${VALUE%\"} - - # do asserts here based upon the output on init - - assert "echo ${VALUE}" $(echo ${ID}) - assert_end nym-socks-5-client-tests - else - echo "exting test no binary found" - fi -else - echo "exting test no binary found" -fi - -#---------------------------------------------------------------------------------------------------------- -# tests -#---------------------------------------------------------------------------------------------------------- -# we run the release version first - -check_nym_socks5_client_binary_build - -first_init=$(cat ${HOME}/.nym/socks5-clients/${ID}/config/config.toml | grep -v "^version =") - -#---------------------------------------------------------------------------------------------------------- -# lets remove the binary then navigate to the target/release directory for checking the latest version -# expect to have successful output and configuration -#---------------------------------------------------------------------------------------------------------- - -if [ -f $BINARY_NAME ]; then - echo "removing socks-5-client binary" - rm -rf $BINARY_NAME -else - echo "no binary found exiting" - exit 1 -fi - -#---------------------------------------------------------------------------------------------------------- -# we should expect it to pass because no errors should be presented when performing the upgrade of an init -# this should be caught at testing stage - navigate to latest binary build -#---------------------------------------------------------------------------------------------------------- - -cd ${PWD}${RELEASE_DIRECTORY} - -# re-run against the current binary built locally - -echo "diff the config files after each init" -echo "-------------------------------------" - -check_nym_socks5_client_binary_build - -second_init=$(cat ${HOME}/.nym/socks5-clients/${ID}/config/config.toml | grep -v "^version =") - -diff -w <(echo "$first_init") <(echo "$second_init") - -# check the status of the diff -if [ $? -eq 0 ]; then - echo "no differences in config files, exiting script" - exit 0 -else - echo "there are differences in the config files, it may require a fresh init on the binary" - exit 1 -fi - -# we should expect it to pass because no errors should be presented when performing the upgrade of an init